Ricodificare un file PKCS12 per OpenVPN con OpenSSL » Cronologia » Versione 2
Simone Piccardi, 02-02-2024 16:27
1 | 1 | Simone Piccardi | h1. Ricodificare un file PKCS12 per OpenVPN con OpenSSL |
---|---|---|---|
2 | |||
3 | 2 | Simone Piccardi | 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: |
4 | 1 | Simone Piccardi | |
5 | <pre> |
||
6 | 2023-10-02 17:06:30 OpenSSL: error:11800071:PKCS12 routines::mac verify failure |
||
7 | 2023-10-02 17:06:30 OpenSSL: error:0308010C:digital envelope routines::unsupported |
||
8 | 2023-10-02 17:06:30 Decoding PKCS12 failed. Probably wrong password or unsupported/legacy encryption |
||
9 | 2023-10-02 17:06:30 Error: private key password verification failed |
||
10 | 2023-10-02 17:06:30 Exiting due to fatal error |
||
11 | </pre> |
||
12 | |||
13 | 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'è. |
||
14 | |||
15 | 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: |
||
16 | |||
17 | <pre> |
||
18 | root@bookworm:~# openssl pkcs12 -in cert.p12 -out temp.pem --nodes |
||
19 | Enter Import Password: |
||
20 | Error outputting keys and certificates |
||
21 | 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 () |
||
22 | </pre> |
||
23 | |||
24 | ed in questo caso l'errore è molto più chiaramente identificabile. |
||
25 | |||
26 | 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: |
||
27 | |||
28 | <pre> |
||
29 | openssl pkcs12 -in cert.p12 -out temp.pem --nodes --legacy |
||
30 | </pre> |
||
31 | |||
32 | 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: |
||
33 | |||
34 | <pre> |
||
35 | openssl pkcs12 -export -in temp.pem -out nuovo.p12 |
||
36 | </pre> |
||
37 | |||
38 | che richiede due volte una passphrase e salva il nuovo certificato in @nuovo.p12@. |