Project

General

Profile

OpenCheckCertKey » History » Version 2

Simone Piccardi, 11/13/2014 03:12 PM

1 1 Simone Piccardi
h1. Verificare la corrispondenza di chiave e certificato.
2 1 Simone Piccardi
3 2 Simone Piccardi
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:
4 1 Simone Piccardi
5 1 Simone Piccardi
<pre>
6 1 Simone Piccardi
openssl s_server -cert server-cert.pem -key server-key.pem 
7 1 Simone Piccardi
</pre>
8 1 Simone Piccardi
9 1 Simone Piccardi
se l'abbinamento è corretto si otterrà:
10 1 Simone Piccardi
11 1 Simone Piccardi
<pre>
12 1 Simone Piccardi
Using default temp DH parameters
13 1 Simone Piccardi
Using default temp ECDH parameters
14 1 Simone Piccardi
ACCEPT
15 1 Simone Piccardi
</pre>
16 1 Simone Piccardi
17 1 Simone Piccardi
altrimenti si otterrà:
18 1 Simone Piccardi
19 1 Simone Piccardi
<pre>
20 1 Simone Piccardi
Using default temp DH parameters
21 1 Simone Piccardi
Using default temp ECDH parameters
22 1 Simone Piccardi
error setting private key
23 1 Simone Piccardi
26606:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:406:
24 1 Simone Piccardi
</pre>
25 2 Simone Piccardi
26 2 Simone Piccardi
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:
27 2 Simone Piccardi
28 2 Simone Piccardi
<pre>
29 2 Simone Piccardi
cat server-cert.pem server-interm.pem > server-chain.pem
30 2 Simone Piccardi
</pre>
31 2 Simone Piccardi
32 2 Simone Piccardi
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. 
33 2 Simone Piccardi
34 2 Simone Piccardi
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:
35 2 Simone Piccardi
36 2 Simone Piccardi
<pre>
37 2 Simone Piccardi
# openssl verify server-interm.pem 
38 2 Simone Piccardi
server-interm.pem: OK
39 2 Simone Piccardi
</pre>
40 2 Simone Piccardi
41 2 Simone Piccardi
e poi per verificare il certificato finale con:
42 2 Simone Piccardi
43 2 Simone Piccardi
<pre>
44 2 Simone Piccardi
# openssl verify -CAfile server-interm.pem server-cert.pem
45 2 Simone Piccardi
server-cert.pem: OK
46 2 Simone Piccardi
</pre>
47 2 Simone Piccardi
48 2 Simone Piccardi
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:
49 2 Simone Piccardi
50 2 Simone Piccardi
<pre>
51 2 Simone Piccardi
# openssl s_client -connect localhost:25 -starttls smtp -CApath /etc/ssl/certs/
52 2 Simone Piccardi
CONNECTED(00000003)
53 2 Simone Piccardi
[...]
54 2 Simone Piccardi
    Compression: 1 (zlib compression)
55 2 Simone Piccardi
    Start Time: 1415887713
56 2 Simone Piccardi
    Timeout   : 300 (sec)
57 2 Simone Piccardi
    Verify return code: 0 (ok)
58 2 Simone Piccardi
---
59 2 Simone Piccardi
250 DSN
60 2 Simone Piccardi
</pre>
61 2 Simone Piccardi
62 2 Simone Piccardi
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).