Vediamo di seguito i passi per generare un certificato SSL autofirmato, o self-signed, cioè un certificato generato dal suo stesso autore, e non da un’autorità competente in questo.
Generare l’autorità di certificazione
Generare la chiave privata
openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 4096
Generare il certificato
openssl req -new -x509 -days 3650 -key /etc/pki/CA/private/cakey.pem -extensions v3_ca -out /etc/pki/CA/cacert.pem
Creare i file che serviranno a tener traccia dei certificati generati
$ touch /etc/pki/CA/index.txt $ echo '01' > /etc/pki/CA/serial
In base alle impostasioni di /etc/pki/tls/openssl.cnf i passaggi successivi per la generazione del certificato dovrebbero prendere l’autorità appena creata come CA di riferimento.
Per aggiungere l’autorità creata come fidata ca aggiunto il certificato appena generato nella cartella seguente e lanciato il comando di aggiornamento certificati
ln -s /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/cacert.pem update-ca-trust extract
Infine è possibile controllare che tutti funzioni a dovere lanciando il comando
openssl s_client -showcerts -connect 127.0.0.1:443
Generare la chiave privata RSA
Il toolkit OpenSSL viene usato per generare le chiavi private RSA e CSR (Certificate Signing Request)
Il primo passo è quello di creare la chiave privata RSA. Questa è una chiave RSA a 2048 bit che viene crittografata utilizzando Triple-DES e memorizzata in un formato PEM in modo che sia leggibile come testo ASCII. A tal fine, ecco il comando che può essere utilizzato:
openssl genrsa -des3 -out /etc/pki/tls/private/localhost.key.pass 2048
Generare la CSR (Certificate Signing Request)
Dopo la generazione della chiave privata, deve essere creata la CSR. Essa verrà utilizzata in due modi. In primo luogo, verrà inviata a un’autorità di certificazione, come Verisign o Thawte, che verificherà l’identità del richiedente e rilascerà un certificato firmato. In secondo luogo, bisognerà poi auto-firmare la chiave RSI; vedremo questo step più tardi.
Durante la generazione del CSR, verranno richieste diverse informazioni, come il Common Name, o Nome Host. E ‘importante che questo campo si compili correttamente con il nome completo del dominio del server da proteggere col protocollo SSL. Se il sito da proteggere sarà https://public.tecn.it, immettere quindi public.tecn.it in questo prompt.
Per generare la CSR si potrà adoperare il seguente comando:
openssl req -new -key /etc/pki/tls/private/localhost.key.pass -out /etc/pki/tls/localhost.csr
ed ecco che appariranno alcuni dati come questi:
Nome Paese (2 codice in lettere) [IT] : IT
Stato o Nome Provincia (nome completo) [Italia] : Italia
Nome Località (es, città) [Italia] : Pesaro
Nome Organizzazione (es, società) [Mia Società] : Tecn
Nome unità organizzativa (ad esempio, sezione) [] : Tecn Italia
Nome Web (es, il tuo nome o il tuo server hostname) [] : public.tecn.it
Indirizzo Mail [] : info@tecn.it
Si prega di inserire i seguenti attributi extra
da inviare con la richiesta di certificato
Password corrispondente []:
Un nome della società opzionale []:
Un metodo alternativo per generare la CSR che includa più domini è il seguente
openssl req -new -key /etc/pki/tls/private/localhost.key.pass -subj '/C=IT/ST=Italia/L=Paese/O=Nome/OU=Nome OU/CN=www.example.com/emailAddress=info@example.com/subjectAltName=DNS.1=endpoint.com,DNS.2=domain.example.com,DNS.3=*.endpoint.com' -out /etc/pki/tls/localhost.csr openssl req -new -key /etc/pki/tls/private/localhost.key.pass -subj '/C=IT/ST=Italia/L=Paese/O=Nome/OU=Nome OU/CN=*.example.com/emailAddress=info@example.com/' -out /etc/pki/tls/localhost.csr
Rimuovere la passphrase dalla key
Una conseguenza della pass generata dalla chiave privata è che Apache chiederà la passphrase ogni volta che viene avviato il server web. Ovviamente questo non è necessariamente conveniente in quanto non sarà sempre presente qualcuno per digitare la passphrase, come ad esempio dopo un riavvio o un crash. mod_ssl include la possibilità di usare un programma esterno al posto del built-in passphrase di dialogo; tuttavia, nemmeno questa potrebbe essere l’opzione più sicura. La crittografia Triple-DES può anche essere rimossa dalla chiave, eliminando così la necessità di digitare una passphrase. Con la chiave privata non più criptata, è fondamentale che questo file sia leggibile solo dall’utente root. In caso di compromissione del sistema in cui un terzo ottiene la chiave privata in chiaro, il corrispondente certificato dovrà essere revocato.
Il comando seguente può essere utilizzato per rimuovere la passphrase dalla chiave:
openssl rsa -in /etc/pki/tls/private/localhost.key.pass -out /etc/pki/tls/private/localhost.key
In questo modo il nuovo file appena creato server.key non avrà più la pass su di esso.
Generare il certificato autofirmato
A questo punto sarà necessario generare un certificato self-signed (autofirmato) se non avrete intenzione di avere il vostro certificato firmato da una CA (Certificate Authority), o se si desidera testare la nuova implementazione SSL mentre la CA firma il certificato. Questo certificato sarà temporaneo e genererà un avviso nel browser del client, dovuto al fatto che l’autorità della firma del certificato è sconosciuta e non attendibilie.
Per generare un certificato autofirmato con la durata di 365 giorni, eseguire il seguente comando:
openssl x509 -req -days 365 -in /etc/pki/tls/localhost.csr -signkey /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.crt
con una risposta del server simile a questa:
Firma ok
Soggetto = / C = CH / ST = Italia / L = Pesaro / O = Tecn IT / OU = Tecn
Italia / NC = public.tecn.it / Email = info@tecn.it
Come chiave privata
Generare il certificato firmato dall’autorità creata
Possono esserci due modalità, tramite il comando ca e il comando x509
openssl ca -days 365 -in /etc/pki/tls/localhost.csr -out /etc/pki/tls/certs/localhost.crt openssl x509 -req -days 1500 -in /etc/pki/tls/localhost.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -out /etc/pki/tls/certs/localhost.crt
Installare la chiave privata e il certificato SSL su Apache
<Virtualhost _default_:443> SSLEngine on SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown CustomLog logs/ssl_request_log \ “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”