Progetto

Generale

Profilo

OpenCheckCertKey » Cronologia » Versione 4

Simone Piccardi, 13-11-2014 15:33

1 4 Simone Piccardi
h1. Verificare chiavi e certificati nelle configurazioni di SSL/TLS
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
<pre>
6
openssl s_server -cert server-cert.pem -key server-key.pem 
7
</pre>
8
9
se l'abbinamento è corretto si otterrà:
10
11
<pre>
12
Using default temp DH parameters
13
Using default temp ECDH parameters
14
ACCEPT
15
</pre>
16
17
altrimenti si otterrà:
18
19
<pre>
20
Using default temp DH parameters
21
Using default temp ECDH parameters
22
error setting private key
23
26606:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:406:
24
</pre>
25 2 Simone Piccardi
26 3 Simone Piccardi
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@. 
27 2 Simone Piccardi
28 3 Simone Piccardi
In questo caso occorrerà prima verificare la validità del certificato intermedio con:
29 2 Simone Piccardi
30
<pre>
31
# openssl verify server-interm.pem 
32
server-interm.pem: OK
33 1 Simone Piccardi
</pre>
34 2 Simone Piccardi
35 3 Simone Piccardi
e poi per verificare il certificato finale utilizzando il certificato intemedio con:
36 1 Simone Piccardi
37 2 Simone Piccardi
<pre>
38 1 Simone Piccardi
# openssl verify -CAfile server-interm.pem server-cert.pem
39
server-cert.pem: OK
40
</pre>
41
42 3 Simone Piccardi
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@).
43 1 Simone Piccardi
44 3 Simone Piccardi
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:
45
46 2 Simone Piccardi
<pre>
47 3 Simone Piccardi
cat server-cert.pem server-interm.pem > server-chained.pem
48
</pre>
49
50
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. 
51
52
53
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:
54
55
<pre>
56 1 Simone Piccardi
# openssl s_client -connect localhost:25 -starttls smtp -CApath /etc/ssl/certs/
57 2 Simone Piccardi
CONNECTED(00000003)
58
[...]
59
    Compression: 1 (zlib compression)
60
    Start Time: 1415887713
61
    Timeout   : 300 (sec)
62
    Verify return code: 0 (ok)
63
---
64
250 DSN
65
</pre>
66
67 3 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@); si noti come in questo caso è necessario indicare con @-CApath@ la directory dove sono mantenuti i certificati delle Certification Autority riconosciute.