Project

General

Profile

OpenCheckCertKey » History » Version 2

« Previous - Version 2/4 (diff) - Next » - Current version
Simone Piccardi, 11/13/2014 03:12 PM


Verificare la corrispondenza di chiave e certificato.

Quando si lavoro 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, perché la verifica abbia successo occorre che sia disponibile nel file che si specifica con l'opzione -cert tutta la catena, pertanto se server-interm.pem è il certificato intermedio fornito dalla propria Certification Authority, si dovrà creare un file contenente tutti i certificati compreso quello (o quelli, se la catena è più lunga) della catena di certificazione, questo si fa con:

cat server-cert.pem server-interm.pem > server-chain.pem

e 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'ultimoed è in questa forma che si devono creare i file di certificati usati ad esempio nelle direttive smtpd_tls_cert_file di Postfix o ssl_cert di Dovecot.

Per verificare manualmente con i singoli file che la catena sia corretta occorrerà invece usare il comando verify della suite di openssl, prima per verificare la validità del certificato intermedio con:

# openssl verify server-interm.pem 
server-interm.pem: OK

e poi per verificare il certificato finale con:

# openssl verify -CAfile server-interm.pem server-cert.pem
server-cert.pem: OK

Si potrà anche controllare il funzionamento e l'eventuale correttezza dei certificati installati su un servizio attivo con il comando s_client di openssl, ad esempio per verificare il funzionamento di Postfix si potrà usare:

# 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) e con -CApath la directory dove sono mantenuti i certificati delle Certification Autority riconosciute (si è indicato il default di Debian).