Documentazione di Ubuntu → Ubuntu 10.04 → Guida a Ubuntu server → Sicurezza → Certificati

## Certificati

Una delle più comuni forme di crittografia odierna è la crittografia a chiave pubblica. Questo tipo di crittografia utilizza una chiave pubblica e una chiave privata. Il sistema funziona cifrando le informazioni usando la chiave pubblica che possono solo essere decifrate con la chiave privata.

L'utilizzo più comune della crittografia a chiave pubblica è nella cifratura del traffico delle applicazioni attraverso una connessione SSL (Secure Socket Layer) o TLS (Transport Layer Security), per esempio configurando Apache affinché fornisca HTTPS, il protocollo HTTP via SSL. Questo consente di cifrare il traffico utilizzando un protocollo che non fornisce nativamente una cifratura.

Un certificato è un metodo di distribuzione di una chiave pubblica e di altre informazioni riguardo un server e l'organizzazione che ne è responsabile. I certificati possono essere firmati digitalmente a un'Autorità di Certificazione o CA. Una CA è un'entità fidata che conferma la veridicità delle informazioni contenute nel certificato.

### Tipologie dei certificati

Per configurare un server sicuro affinché usi la crittografia a chiave pubblica, nella maggior parte dei casi, è necessario inviare la richiesta del certificato (compresa la chiave pubblica), una prova di esistenza della propria società e il pagamento a una CA. La CA verifica la richiesta e la propria identità e quindi invia un certificato per il proprio server. In alternativa, è possibile creare il proprio certificato auto-firmato.

I certificati auto-firmati non dovrebbero essere usati in ambienti di produzione.

Continuando l'esempio di HTTPS, un certificato CA firmato dispone di caratteristiche che un certificato auto-firmato non ha:

- I browser, solitamente, riconoscono automaticamente il certificato e consentono l'attivazione di una connessione sicura senza chiedere nulla all'utente.

- Quando una CA emette un certificato, garantisce l'identità dell'organizzazione che fornisce la pagina web al browser.

La maggior parte dei browser web, e dei computer che supportano SSL, dispongono di un elenco di CA i cui certificati sono accettati automaticamente. Se un browser incontra un certificato la cui CA non è presente nell'elenco, il browser chiede all'utente di accettare o rifiutare la connessione. Inoltre, altre applicazioni possono generare un messaggio di errore quando viene usato un certificato auto-firmato.

Il processo per ottenere un certificato da una CA è molto semplice. Un piccolo promemoria:

1. Creare un coppia di chiavi pubblica e privata.

2. Creare una richiesta per un certificato basato su chiave pubblica. La richiesta del certificato contiene informazioni riguardo il server a la società che lo ospita.

3. Inviare la richiesta, con una fotocopia di un documento di identità, a una CA. Non è possibile consigliare quale autorità di certificazione scegliere. La decisione potrebbe essere basata su esperienze passate, esperienze di amici o colleghi o per un fattore economico.

   Una volta scelta la CA, è necessario seguire le istruzioni fornite dal CA per ottenere il certificato.

4. Una volta che la CA ha verificato l'identità del richiedente, invierà un certificato digitale.

5. Installare questo certificato sul proprio server sicuro e configurare le applicazioni appropriate affinché usino il certificato.

### Generare una CSR (Certificate Signing Request)

Sia che si stia ottenendo un certificato da una CA sia che si auto-firmi il proprio, il primo passo consiste nel generare una chiave di cifratura.

Se il certificato verrà usato da servizi come Apache, Postfix, Dovect, ecc..., è solitamente indicato usare una chiave priva di passphrase.

Questa sezione indica come generare una chiave dotata di passphrase e una priva di passphrase. La chiave priva di passphrase verrà impiegata per generare un certificato che può essere usato da diversi servizi.

Avere in esecuzione i servizi senza una passphrase è conveniente poiché non vi è la necessità di digitare la passphrase a ogni avvio del servizio, ma non è molto sicuro in quanto se la chiave viene compromessa, verrà compromesso anche il server.

Per generare le chiavi per la CSR (Certificate Signing Request), eseguire in un terminale il seguente comando:

    openssl genrsa -des3 -out server.key 1024

    Generating RSA private key, 1024 bit long modulus
    .....................++++++
    .................++++++
    unable to write 'random state'
    e is 65537 (0x10001)
    Enter pass phrase for server.key:

È ora necessario inserire una passphrase. Per una maggiore sicurezza, dovrebbe contenere almeno 8 caratteri. La lunghezza minima con l'opzione «-des3» è di 4 caratteri. Dovrebbe includere numeri o segni di punteggiatura e non dovrebbe essere una parola reperibile in un vocabolario. Ricordarsi che una passphrase differenzia tra minuscole e maiuscole.

Digitare nuovamente la passphrase per la verifica. Una volta digitata correttamente, la chiave per il server viene generata e archiviata nel file `server.key`.

Creare la chiave insicura, quella priva di passphrase, e scambiare i nomi delle chiavi:

    openssl rsa -in server.key -out server.key.insecure
    mv server.key server.key.secure
    mv server.key.insecure server.key

La chiave insicura è ora chiamata `server.key` ed è possibile usare questo file per generare la CSR senza passphrase.

Per creare il CSR, eseguire il seguente comando:

    openssl req -new -key server.key -out server.csr

It will prompt you enter the passphrase. If you enter the correct passphrase, it will prompt you to enter Company Name, Site Name, Email Id, etc. Once you enter all these details, your CSR will be created and it will be stored in the `server.csr` file.

È ora possibile inviare il file della CSR alla CA che lo utilizzerà per creare il certificato finale. È comunque possibile creare un certificato auto-firmato utilizzando questa CSR.

### Creare un certificato auto-firmato

Per creare un certificato auto-firmato, eseguire da un terminale il seguente comando:

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Il comando precedente chiederà la passphrase. Una volta digitata correttamente, il certificato viene creato e sarà disponibile nel file `server.crt`.

Se il server deve essere utilizzato in ambito commerciale, è necessario un certificato emesso da una CA. Non è raccomandato utilizzare un certificato auto-firmato.

### Installare il certificato

È possibile installare il file `server.key` e quello del certificato `server.crt`, o il file del certificato fornito dalla CA, eseguendo, in un terminale, i seguenti comandi:

    sudo cp server.crt /etc/ssl/certs
    sudo cp server.key /etc/ssl/private

Ora basta configurare le applicazioni che possono usare la crittografia a chiave pubblica affinché utilizzino i file del certificato e della chiave. Per esempio, Apache può fornire HTTPS, Dovecot può fornire IMAPS e POP3S ecc...

### Autorità di Certificazione

Se i servizi all'interno della propria rete richiedono più di un certificato auto-firmato, potrebbe essere utile impostare una Autorità di Certificazione personale. Usando certificati firmati dalla propria CA, consente ai vari servizi che usano tali certificati di fidarsi di altri servizi che fanno uso di certificati emessi dalla stessa CA.

1. Per prima cosa, creare le directory che conterranno il certificato della CA e i file relativi

       sudo mkdir /etc/ssl/CA
       sudo mkdir /etc/ssl/newcerts

2. La CA necessita di alcuni altri file per funzionare correttamente: uno per tenere traccia dell'ultimo numero seriale usato (ogni certificato deve avere un numero univoco) e l'altro per registrare quali certificati sono stati emessi:

       sudo sh -c "echo '01' > /etc/ssl/CA/serial"
       sudo touch /etc/ssl/CA/index.txt

3. Il terzo file è il file di configurazione della CA. Benché non strettamente necessario, è molto utile quando vengono emessi certificati multipli. Aprire il file `/etc/ssl/openssl.cnf` e nella sezione [ CA_default ] modificare:

       dir             = /etc/ssl/             # Dove viene salvato tutto
       database        = $dir/CA/index.txt     # File indice del database
       certificate     = $dir/certs/cacert.pem # Il certificato della CA
       serial          = $dir/CA/serial        # Il numero seriale corrente
       private_key     = $dir/private/cakey.pem# La chiave privata

4. Creare il certificato auto-firmato principale:

       openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

   Viene chiesto di inserire i dettagli del certificato.

5. Installare il certificato principale e la chiave:

       sudo mv cakey.pem /etc/ssl/private/
       sudo mv cacert.pem /etc/ssl/certs/

6. È ora possibile firmare i certificati. La prima cosa necessaria è una CSR (Certificate Signing Request), consultare la sezione chiamata «Generare una CSR (Certificate Signing Request)». Una volta ottenuta, digitare quanto segue per generare un certificato firmato dalla CA:

       sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf

   Inserita la passoword della chiave CA, viene chiesto di firmare il certificato e di generare quello nuovo. Dovrebbe quindi essere visibile l'output della generazione del certificato stesso.

7. Dovrebbe essere presente un nuovo file, `/etc/ssl/newcerts/01.pem`, contenente il medesimo output. Copiare partendo da -----BEGIN CERTIFICATE----- fino alla riga ----END CERTIFICATE----- e incollarlo in un file chiamato come il nome host del server in cui verrà installato. Per esempio: `mail.example.it.crt`.

   Tutti i certificati successivi saranno chiamati `02.pem`, `03.pem`, ecc...

   Sostituire mail.example.it.crt con un nome descrittivo appropriato al proprio caso.

8. In fine, copiare il nuovo certificato nell'host e configurare le applicazioni al suo uso. La posizione predefinita per l'installazione dei certificati è `/etc/ssl/certs`, consentendo così a molteplici servizi di usare lo stesso certificato senza complicare inutilmente i permessi.

   Per le applicazioni che possono essere configurate all'uso di un certificato di una CA, è necessario copiare il file `/etc/ssl/certs/cacert.pem` nella directory `/etc/ssl/certs/` di ogni server.

### Riferimenti

- Per ulteriori informazioni sull'utilizzo della crittografia, consultare lo SSL Certificates HOWTO.

- Il sito The PKI Page contiene un elenco di autorità di certificazione.

- La pagina Wikipedia HTTPS dispone di ulteriori informazioni riguardo HTTPS.

- Per maggiori informazioni riguardo OpenSSL, consultare il sito web di OpenSSL.

- Inoltre, il libro Network Security with OpenSSL di O'Reilly è un ottimo punto di riferimento.

AppArmor |  | eCryptfs