OpenSslPKCS12 » Cronologia » Versione 10
« Precedente |
Versione 10/13
(diff)
| Successivo »
Simone Piccardi, 02-10-2023 15:47
Come estrarre CA, Certificati e chiavi da un file PKCS12 o PFX¶
È necessario avere installato OpenSSL nel proprio sistema, questo si può fare con:
apt-get install openssl
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).
Estrazione da un file .p12 (PKCS12)¶
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.
Estrazione del certificato:¶
openssl pkcs12 -clcerts -nokeys -in mycert.p12 -out usercert.pem
Estrazione della chiave:¶
openssl pkcs12 -nocerts -in mycert.p12 -out userkey.pem
Estrazione del certificato della CA:¶
openssl pkcs12 -nokeys -nodes -cacerts -in mycert.p12 -out cacert.pem
Cambiamento della password su un certificato PKCS12¶
Deve essere fatto in due passi, prima deve essere estratto il contenuto del certificato PKCS12 su un file .pem
con:
openssl pkcs12 -in originale.p12 -out temp.pem -nodes
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:
openssl pkcs12 -export -in temp.pem -out nuovo.p12
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).
Ricodifica di un certificato PKCS12 con codifica obsoleta¶
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:
2023-10-02 17:06:30 OpenSSL: error:11800071:PKCS12 routines::mac verify failure 2023-10-02 17:06:30 OpenSSL: error:0308010C:digital envelope routines::unsupported 2023-10-02 17:06:30 Decoding PKCS12 failed. Probably wrong password or unsupported/legacy encryption 2023-10-02 17:06:30 Error: private key password verification failed 2023-10-02 17:06:30 Exiting due to fatal error
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'è.
Quando si usa openssl
l'errore si verifica ad esempio provando ad esportare i dati del certificato come nel caso precedente, si ottiene:
root@bookworm:~# openssl pkcs12 -in cert.p12 -out temp.pem --nodes Enter Import Password: Error outputting keys and certificates 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 ()
ed in questo caso l'errore è molto più chiaramente identificabile.
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:
openssl pkcs12 -in cert.p12 -out temp.pem --nodes --legacy
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:
openssl pkcs12 -export -in temp.pem -out nuovo.p12
che richiede due volte una passphrase e salva il nuovo certificato in nuovo.p12
.
Estrazione da un file .pfx¶
Estrazione del certificato:¶
openssl pkcs12 -in certificate.pfx -nokeys -out cert.pem
chiederà la passphrase del certificato e creerà il file cert.pem
col certificato.
Estrazione della chiave:¶
Quando si deve estrarre la chiave (privata) da un file .pfx
occorrerà passare dall'esportazione dei dati:
openssl pkcs12 -in certificate.pfx -nocerts -out key.pem -nodes
chiederà la passphrase del certificato e creerà il file key.pem
con dentro chiave e certificato, poi per ottenere la sola chiave occorrerà:
openssl rsa -in key.pem -out server.key
Aggiornato da Simone Piccardi circa un anno fa · 10 revisions