OpenCheckCertKey » Cronologia » Versione 3
Versione 2 (Simone Piccardi, 13-11-2014 15:12) → Versione 3/6 (Simone Piccardi, 13-11-2014 15:33)
h1. 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: <pre> openssl s_server -cert server-cert.pem -key server-key.pem </pre> se l'abbinamento è corretto si otterrà: <pre> Using default temp DH parameters Using default temp ECDH parameters ACCEPT </pre> altrimenti si otterrà: <pre> 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: </pre> Si tenga presente che se un certificato è stato firmato da un certificato intermedio l'associazione fra certificato e chiave non è sufficiente, intermedio, perché la verifica abbia successo occorre anche vericare la correttezza di 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 certificazione, questo si può fare fa con: <pre> cat server-cert.pem server-interm.pem > server-chain.pem </pre> 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@, 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 per verificare la validità del certificato intermedio con: <pre> # openssl verify server-interm.pem server-interm.pem: OK </pre> e poi per verificare il certificato finale utilizzando il certificato intemedio con: <pre> # openssl verify -CAfile server-interm.pem server-cert.pem server-cert.pem: OK </pre> 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 certifiato finale, ma tutta la catena, pertanto ssi dovrà creare un file contenente tutti i certificati della catena di certificazione con: <pre> cat server-cert.pem server-interm.pem > server-chained.pem </pre> 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 Si potrà anche controllare il funzionamento e la 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 il comando: usare: <pre> # 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 </pre> 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 @ftp@) e con @-CApath@ la directory dove sono mantenuti i certificati delle Certification Autority riconosciute. riconosciute (si è indicato il default di Debian).