Verificare chiavi e certificati nelle configurazioni di SSL/TLS¶
Quando si lavora con file .pem
nella gestione di certificati SSL, specie se si cambiano i certificati su un server, può capitare di confondere i file, e non essere più sicuri di aver associato correttamente un certificato alla sua chiave. La modalità più immediata per verificare che il file server-cert.pem
sia effettivamente un certificato associato alla chiave del file server-key.pem
è quella di usare il comando s_server
della suite di openssl
, in pratica basta eseguire:
openssl s_server -cert server-cert.pem -key server-key.pem
se l'abbinamento è corretto si otterrà:
Using default temp DH parameters Using default temp ECDH parameters ACCEPT
altrimenti si otterrà:
Using default temp DH parameters Using default temp ECDH parameters error setting private key 26606:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:406:
Si tenga presente che se un certificato è stato firmato da un certificato intermedio l'associazione fra certificato e chiave non è sufficiente, occorre anche vericare la correttezza di tutta la catena di certificazione. Questo si può fare con il comando verify
della suite di openssl
, percorrendo la catena di certificazione. Il caso più comune è quello in cui esiste un solo passo attraverso un certificato intermedio server-interm.pem
fornito dalla propria Certification Authority insieme al certificato firmato server-cert.pem
.
In questo caso occorrerà prima verificare la validità del certificato intermedio con:
# openssl verify server-interm.pem server-interm.pem: OK
e poi per verificare il certificato finale utilizzando il certificato intemedio con:
# openssl verify -CAfile server-interm.pem server-cert.pem server-cert.pem: OK
dove appunto con -CAfile
si indica di usare server-interm.pem
per la verifica e non il default che su Debian è fare riferimento ai certificati delle Certification Authority riconosciute installati sotto /etc/ssl/certs/
(qualora fossero altrove nel primo comando si sarebbe dovuto specificarlo con l'opzione -CApath
).
Una volta stabilita la correttezza e la corrispondenza di tutti i file, si deve tener presente che molti server richiedono che nel file del certificato (quello da indicare ad esempio nelle direttive smtpd_tls_cert_file
di Postfix o ssl_cert
di Dovecot) venga inserito non il certificato finale, ma tutta la catena, pertanto si dovrà creare un file contenente tutti i certificati della catena di certificazione con:
cat server-cert.pem server-interm.pem > server-chained.pem
ed usare server-chained.pem
nelle direttive citate; si tenga presente che l'ordine conta: si deve seguire all'indietro la catena, dal proprio certificato fino a quello della Certification Authority, omettendo quest'ultimo.
Infine una volta configurato il servizio se ne potrà controllare il funzionamento e la correttezza dei certificati installati con il comando s_client
di openssl
, ad esempio per verificare il funzionamento di Postfix si potrà usare il comando:
# openssl s_client -connect localhost:25 -starttls smtp -CApath /etc/ssl/certs/ CONNECTED(00000003) [...] Compression: 1 (zlib compression) Start Time: 1415887713 Timeout : 300 (sec) Verify return code: 0 (ok) --- 250 DSN
avendo cura di indicare con -starttls
il tipo di protocollo usato quando si opera con STARTLS (altri valori possibili sono pop3
, imap
e ftp
); si noti come in questo caso è necessario indicare con -CApath
la directory dove sono mantenuti i certificati delle Certification Autority riconosciute.
Aggiornato da Simone Piccardi 5 mesi fa · 6 revisions