## 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 utilizzato per distribuire una chiave pubblica e altre informazioni riguardo il server e l'organizzazione che ne è responsabile. I certificati possono essere firmati digitalmente da un'autorità di certificazione o CA. Una CA è un'entità super-partes che conferma che le informazioni contenute nel certificato sono accurate.

### 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 un 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 sita ottenendo un certificato da una CA sia che si auto-firmi il proprio, il primo passo consiste nel generare una chiave di cifratura.

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 e/o segni di punteggiatura e non dovrebbe essere una parola reperibile in un vocabolario. Ricordarsi che la passphrase è "case-sensitive".

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

È possibile anche eseguire i servizi sicuri senza una passphrase. Questo è utile in quanto non è necessario inserire la passphrase ogni qual volta venga avviato il servizio, ma è meno sicuro e la manomissione della chiave può comportare una manomissione dell'intero server.

In ogni caso, è possibile scegliere se eseguire il servizio sicuro senza una passphrase non utilizzando l'opzione "-des3" nella fase di generazione o eseguendo, in un terminale, il seguente comando:

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

Una volta eseguito il comando precedente, la chiave non sicura è creata nel file `server.key.insecure`. È possibile utilizzare questo file per generare il CSR senza una passphrase.

Per creare il CSR, eseguire il seguente comando:

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

Viene chiesto di inserire la passphrase. Se viene inserita la passphrase corretta, viene chiesto di inserire il nome della società, nome del sito, email ecc... Una volta inseriti tutti questi dettagli, la CSR viene creata e archiviata nel file `server.csr`.

È ora possibile inviare il file della CSR alla CA che utilizzerà il file CSR 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...

### 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.

AppArmor |  | Capitolo 9. Server web