Project

General

Profile

OpenSslPKCS12 » History » Version 10

Simone Piccardi, 10/02/2023 03:47 PM

1 7 Simone Piccardi
h1. Come estrarre CA, Certificati e chiavi da un file PKCS12 o PFX
2 1 Amministratore Truelite
3 5 Simone Piccardi
È necessario avere installato OpenSSL nel proprio sistema, questo si può fare con:
4 1 Amministratore Truelite
5
<pre>
6 6 Simone Piccardi
apt-get install openssl
7 5 Simone Piccardi
</pre>
8 4 Amministratore Truelite
9 6 Simone Piccardi
si ricordi che l'estrazione della chiave su un file ne rimuove la password, si abbia cura di farla in una directory non leggibile da terzi o di predisporre una opportuna umask. Si aggiustino poi i permessi dei file se li si devono spostare (600/640 per la chiave, 644 per i certificati).
10 1 Amministratore Truelite
11 7 Simone Piccardi
h2. Estrazione da un file .p12 (PKCS12)
12 1 Amministratore Truelite
13 9 Simone Piccardi
Quando si vogliono utilizzare i dati di un certificato PKCS12 con di programmi che utilizzano il formato PEM per chiavi e certificati SSL (come usuale per demoni di sistema come Apache, Postfix, Nginx, ecc.) occorre estrarli esplicitamente. 
14
15 7 Simone Piccardi
h3. Estrazione del certificato:
16
17 1 Amministratore Truelite
<pre>
18
openssl pkcs12 -clcerts -nokeys -in mycert.p12 -out usercert.pem
19
</pre>
20 4 Amministratore Truelite
21 7 Simone Piccardi
h3. Estrazione della chiave:
22 1 Amministratore Truelite
23
<pre>
24
openssl pkcs12 -nocerts -in mycert.p12 -out userkey.pem
25
</pre>
26 4 Amministratore Truelite
27 7 Simone Piccardi
h3. Estrazione del certificato della CA:
28 1 Amministratore Truelite
29
<pre>
30
openssl pkcs12 -nokeys -nodes -cacerts -in mycert.p12 -out cacert.pem
31
</pre>
32 6 Simone Piccardi
33 9 Simone Piccardi
34 6 Simone Piccardi
h3. Cambiamento della password su un certificato PKCS12
35 1 Amministratore Truelite
36 9 Simone Piccardi
Deve essere fatto in due passi, prima deve essere estratto il contenuto del certificato PKCS12 su un file @.pem@ con:
37 6 Simone Piccardi
38
<pre>
39
openssl pkcs12 -in originale.p12 -out temp.pem -nodes
40 1 Amministratore Truelite
</pre>
41 6 Simone Piccardi
42 9 Simone Piccardi
verrà chiesta la password originale, data la quale tutti dati verranno salvati senza password su @temp.pem@, a questo punto lo si potrà rigenerare con una password diversa con:
43 1 Amministratore Truelite
44
<pre>
45
openssl pkcs12 -export -in temp.pem -out nuovo.p12
46
</pre>
47
48 9 Simone Piccardi
si dovrà immettere la nuova password due volte (la seconda per conferma). Per avere un certificato senza password si prema due volte invio. Completato il cambiamento si cancellino i file che non servono più (compreso il temporaneo).
49 7 Simone Piccardi
50 8 Simone Piccardi
h3. Ricodifica di un certificato PKCS12 con codifica obsoleta
51 7 Simone Piccardi
52 10 Simone Piccardi
Può capitare con dei certificati PKCS12 di OpenVPN generati prima del passaggio a OpenSSL 3, che depreca una serie di codifiche interne degli stessi, cosa che rende illeggibili detti certificati sulle macchine che hanno questa nuova versione. Questo accade in particolare nel passaggio di OpenVPN da bullseye a bookworm, che quando si utilizza un @.p12@ generato con una vecchia versione fallisce con un errore del tipo:
53 8 Simone Piccardi
54 1 Amministratore Truelite
<pre>
55 10 Simone Piccardi
2023-10-02 17:06:30 OpenSSL: error:11800071:PKCS12 routines::mac verify failure
56
2023-10-02 17:06:30 OpenSSL: error:0308010C:digital envelope routines::unsupported
57
2023-10-02 17:06:30 Decoding PKCS12 failed. Probably wrong password or unsupported/legacy encryption
58
2023-10-02 17:06:30 Error: private key password verification failed
59
2023-10-02 17:06:30 Exiting due to fatal error
60
</pre>
61
62
che è abbastanza fuorviante, perché pure se dovuto alla seconda ipotesi della terza riga (unsupported/legacy encryption) riportando come errore finale: "private key password verification failed" induce a pensare ad un errore nella password che nel caso non c'è. 
63
64
Quando si usa @openssl@ l'errore si verifica ad esempio provando ad esportare i dati del certificato come nel caso precedente, si ottiene:
65
66
<pre>
67 8 Simone Piccardi
root@bookworm:~# openssl pkcs12 -in cert.p12 -out temp.pem --nodes
68
Enter Import Password:
69
Error outputting keys and certificates
70 9 Simone Piccardi
4067C4EF727F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:373:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
71 1 Amministratore Truelite
</pre>
72 8 Simone Piccardi
73 10 Simone Piccardi
ed in questo caso l'errore è molto più chiaramente identificabile. 
74 1 Amministratore Truelite
75 10 Simone Piccardi
Dato che il problema è nella codifica del @.p12@ e non nei certificati, per poterli utilizzare con OpenSSL 3.0 occorre eseguire l'esportazione degli stessi e poi ricodificare un certificato @.p12@ con un algoritmo supportato. Per questo si deve eseguire l'esportazione con l'opzione aggiuntiva @--legacy@ che consente di leggere i dati anche con le codifiche non più supportate, eseguendo:
76
77 8 Simone Piccardi
<pre>
78 1 Amministratore Truelite
openssl pkcs12 -in cert.p12 -out temp.pem --nodes --legacy
79
</pre>
80 9 Simone Piccardi
81 10 Simone Piccardi
che genera un @.pem@ con tutte le informazioni contenute nel @.p12@ da cui poi si potrà passare a ricreare un PKCS12 ex-novo con codifica corretta con:
82 8 Simone Piccardi
83 1 Amministratore Truelite
<pre>
84 8 Simone Piccardi
openssl pkcs12 -export -in temp.pem -out nuovo.p12
85
</pre>
86
87 10 Simone Piccardi
che richiede due volte una passphrase e salva il nuovo certificato in @nuovo.p12@.
88 8 Simone Piccardi
89 7 Simone Piccardi
h2. Estrazione da un file .pfx
90
91
h3. Estrazione del certificato:
92
93
<pre>
94
openssl pkcs12 -in certificate.pfx -nokeys -out cert.pem
95
</pre>
96 1 Amministratore Truelite
97 8 Simone Piccardi
chiederà la passphrase del certificato e creerà il file @cert.pem@ col certificato. 
98 7 Simone Piccardi
99 1 Amministratore Truelite
h3. Estrazione della chiave:
100
101 8 Simone Piccardi
Quando si deve estrarre la chiave (privata) da un file @.pfx@ occorrerà passare dall'esportazione dei dati:
102
103 7 Simone Piccardi
<pre>
104 1 Amministratore Truelite
openssl pkcs12 -in certificate.pfx -nocerts -out key.pem -nodes
105 7 Simone Piccardi
</pre>
106
107 8 Simone Piccardi
chiederà la passphrase del certificato e creerà il file @key.pem@ con dentro chiave e certificato, poi per ottenere la sola chiave occorrerà:
108 7 Simone Piccardi
109
<pre>
110
openssl rsa -in key.pem -out server.key
111
</pre>