Ricodificare un file PKCS12 per OpenVPN con OpenSSL¶
Può capitare che con dei certificati PKCS12 di OpenVPN generati prima del passaggio a OpenSSL 3, che depreca una serie di codifiche interne degli stessi, questi diventino illeggibili sulle macchine che hanno questa nuova versione, rendendo impossibile lanciare il servizio. Questo accade in particolare nel passaggio di OpenVPN da Bullseye a Bookworm, che quando si utilizza un .p12
generato con una vecchia versione. In questo caso OpenVPN 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 direttamente openssl
l'errore si verifica ad esempio provando ad esportare i dati del certificato in formato PEM, e ad esempio 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
.
Updated by Simone Piccardi 8 months ago · 2 revisions