Progetto

Generale

Profilo

OpenCheckCertKey » Cronologia » Versione 7

Simone Piccardi, 26-08-2025 09:48

1 4 Simone Piccardi
h1. Verificare chiavi e certificati nelle configurazioni di SSL/TLS
2 1 Simone Piccardi
3 7 Simone Piccardi
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 o una richiesta di certificato alla sua chiave. 
4
5
Per verificare che una richiesta di certificato (una CSR) @server-csr.pem@ corrisponda alla rispettiva chiave @server-key.pem@ occorre stampare il "modulo" di entrambe e verificare che corrisponda; per la CSR questo si fa con:
6
7
<pre>
8
$ openssl req -noout -modulus -in server-csr.pem
9
Modulus=B67A110FCE04C933C8A4C41BBC72E9BEB3BB2C887C2375C3BDF15F3356D82E16497A7790B1E6D28A09AA1FD7C6C5D8ABA78CC2A929D6A4AE514118ACC4942CAB91C397435433E6A8E2B0EE7DCC9B371D37043AB558CFEFBA58E4E6074325686AD8EB5C8AB33F409D2872067C6B3C02C1B8DBB0FE4881874988C8790B74A795B839AF751DF238C9B7662098735B4CE50D5987F7FDBA0C99320E0524B17CB066F1BB4D7FE2A10EE84233D092D74C1DCA017E4977900439DD96CF0436DE939F93550BBFA8385A72BF1AA2631E7A885AC653255397EFE986BA9465394F0D2C771D200AEBCA0CF3C5452C6EA4861E44E7227EE2167F294B9B4430D1923609A7ACCCCD
10
</pre>
11
12
mentre per la chiave si fa con:
13
14
<pre>
15
$ openssl rsa -noout -modulus -in server-key.pem 
16
Modulus=B67A110FCE04C933C8A4C41BBC72E9BEB3BB2C887C2375C3BDF15F3356D82E16497A7790B1E6D28A09AA1FD7C6C5D8ABA78CC2A929D6A4AE514118ACC4942CAB91C397435433E6A8E2B0EE7DCC9B371D37043AB558CFEFBA58E4E6074325686AD8EB5C8AB33F409D2872067C6B3C02C1B8DBB0FE4881874988C8790B74A795B839AF751DF238C9B7662098735B4CE50D5987F7FDBA0C99320E0524B17CB066F1BB4D7FE2A10EE84233D092D74C1DCA017E4977900439DD96CF0436DE939F93550BBFA8385A72BF1AA2631E7A885AC653255397EFE986BA9465394F0D2C771D200AEBCA0CF3C5452C6EA4861E44E7227EE2167F294B9B4430D1923609A7ACCCCD
17
</pre>
18
19
se i due output sono identici, come nell'esempio, la corrispondenza è verificata.
20
21
Invece la modalità più immediata per verificare che il certificato @server-cert.pem@ sia effettivamente un certificato associato alla chiave @server-key.pem@ è quella di usare il comando @s_server@ della suite di @openssl@, in pratica basta eseguire:
22 1 Simone Piccardi
23
<pre>
24
openssl s_server -cert server-cert.pem -key server-key.pem 
25
</pre>
26
27
se l'abbinamento è corretto si otterrà:
28
29
<pre>
30
Using default temp DH parameters
31
Using default temp ECDH parameters
32
ACCEPT
33
</pre>
34
35
altrimenti si otterrà:
36
37
<pre>
38
Using default temp DH parameters
39
Using default temp ECDH parameters
40
error setting private key
41
26606:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:406:
42
</pre>
43 2 Simone Piccardi
44 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@. 
45 2 Simone Piccardi
46 3 Simone Piccardi
In questo caso occorrerà prima verificare la validità del certificato intermedio con:
47 2 Simone Piccardi
48
<pre>
49
# openssl verify server-interm.pem 
50
server-interm.pem: OK
51 1 Simone Piccardi
</pre>
52 2 Simone Piccardi
53 3 Simone Piccardi
e poi per verificare il certificato finale utilizzando il certificato intemedio con:
54 1 Simone Piccardi
55 2 Simone Piccardi
<pre>
56 1 Simone Piccardi
# openssl verify -CAfile server-interm.pem server-cert.pem
57
server-cert.pem: OK
58
</pre>
59
60 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@).
61 1 Simone Piccardi
62 6 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 certificato finale, ma tutta la catena, pertanto si dovrà creare un file contenente tutti i certificati della catena di certificazione con:
63 3 Simone Piccardi
64 2 Simone Piccardi
<pre>
65 3 Simone Piccardi
cat server-cert.pem server-interm.pem > server-chained.pem
66
</pre>
67
68
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. 
69
70
71
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:
72
73
<pre>
74 1 Simone Piccardi
# openssl s_client -connect localhost:25 -starttls smtp -CApath /etc/ssl/certs/
75 2 Simone Piccardi
CONNECTED(00000003)
76
[...]
77
    Compression: 1 (zlib compression)
78
    Start Time: 1415887713
79
    Timeout   : 300 (sec)
80
    Verify return code: 0 (ok)
81
---
82
250 DSN
83
</pre>
84
85 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.