Un vecchio P12 non funziona su OpenSSL 3: password sbagliata o cifratura obsoleta?
Distingua una passphrase digitata male da un pacchetto RC2 vecchio che OpenSSL 3 rifiuta di decomprimere, poi risigilli il file senza rimuovere la protezione della chiave.
La finestra di importazione prende la password, gira un istante e poi dice che non riesce a leggere il pacchetto. Nulla in quel messaggio le dice se ha digitato male la passphrase o se il file è stato sigillato con una cifratura che il client non fornisce più. Sono guasti diversi con correzioni diverse, e la scelta sbagliata porta a un downgrade del client che rimanda soltanto la decisione. Osservare la fase in cui il client si ferma li separa in circa un minuto.
Cosa accade tra la finestra e l'elenco dei certificati
Un file .p12 è un contenitore, non un certificato. All'interno ci sono uno o più sacchi di certificati e un sacco di chiave privata cifrato con una chiave derivata dalla password, più un controllo di integrità chiamato MAC sull'intero file. Aprirlo significa verificare quel MAC, decifrare il sacco della chiave e abbinare il certificato alla chiave che ne esce.
Il problema della password arriva alla fase del MAC. Il problema della cifratura arriva più tardi, quando il sacco della chiave va scartato e la build che lo fa non ha alcuna implementazione dell'algoritmo indicato nel file.
Il secondo caso è comune sui sistemi attuali perché OpenSSL 3 ha spostato un gruppo di algoritmi vecchi in un provider legacy opzionale. I pacchetti esportati da OpenSSL 1.x sigillavano di solito i certificati con RC2 a 40 bit e la chiave privata con Triple DES a tre chiavi. Una build predefinita di OpenSSL 3 verifica ancora il MAC con la password corretta e poi fallisce sul sacco, quindi la password non è mai stata sbagliata e ridigitarla non cambia nulla.
Legga il contenitore senza scrivere la chiave
Chieda alla build di OpenSSL sulla sua macchina di analizzare il file e di leggere il punto in cui si arrende. Un'ispezione senza file di output lascia la chiave cifrata sul disco, ed è l'unica ragione per cui questo passo è sicuro su un host condiviso.
openssl pkcs12 -in vpn-identity.p12 -info -nooutSu un pacchetto legacy con la password corretta questo stampa gli attributi del sacco e poi si ferma con digital envelope routines::unsupported. Con una password sbagliata si ottiene Mac verify error: invalid password? prima che venga letto qualsiasi sacco. I due messaggi puntano in direzioni opposte, ed è esattamente l'informazione che il client ha taciuto.
Se il guasto è quello dell'algoritmo non supportato, esegua di nuovo lo stesso comando con -legacy aggiunto e nulla d'altro cambiato. Quel flag carica il provider legacy solo per quel processo. Non fa analizzare i pacchetti vecchi al client VPN, non tocca la politica crittografica di sistema ed è una misurazione, non una riparazione, perché il file va comunque sostituito.
Quale errore corrisponde a quale fase
Una tabella breve tiene separati i tre esiti, e la formulazione conta più del punto in cui è apparsa la finestra.
| Text you see | Stage | What it tells you |
|---|---|---|
Mac verify error: invalid password? | Integrity check | Passphrase or cached credential, not the cipher |
digital envelope routines::unsupported | Bag decrypt | Algorithm missing from the default provider |
not enough data / header too long | Container format | Wrong encoding, edited file, or truncated download |
Un testo come not enough data o header too long non appartiene a nessuno dei primi due gruppi. È un problema di formato: un file DER rinominato in .pem, una copia rovinata da un editor che ha riscritto i fine riga, o un download incompleto. Confronti il checksum con quello inviato dall'emittente prima di iniziare a guardare le cifrature.
Tratti Mac verify error solo come prova sulla password. Significa che il MAC calcolato da ciò che ha digitato non corrisponde al valore memorizzato, cosa che accade con un errore di battitura, con una password in cache da un'importazione precedente o con un file riesportato con un'altra passphrase. Non dice nulla sull'anzianità degli algoritmi interni.
Costruisca un pacchetto che il client possa davvero aprire
Una volta che l'analizzatore legacy conferma che il file è sano, la correzione duratura è una sostituzione i cui algoritmi sono supportati dal client di destinazione: AES-256-CBC per i sacchi di chiave e certificati, PBKDF2 con SHA-256 per la derivazione e SHA-256 per il MAC. Il suo amministratore PKI può esportarla dallo stesso materiale di chiave, e il certificato all'interno resta quello di cui i suoi server si fidano già.
Quando deve convertire in locale, chieda allo strumento pkcs12 di risigillare i sacchi invece di estrarli prima. Tenga entrambe le passphrase fuori dalla cronologia della shell leggendole da un file.
openssl pkcs12 -in vpn-identity.p12 -out vpn-identity-aes.p12 \
-keypbe AES-256-CBC -certpbe AES-256-CBC -macalg sha256 \
-passin file:old.pass -passout file:new.passUna conversione riuscita non dice nulla su scadenza, uso della chiave, corrispondenza della chiave privata o fiducia del server nella catena emittente. Il reimballaggio è un cambio di trasporto, non un rinnovo, e ciascuno di questi punti richiede ancora la propria verifica.
Scarti qualsiasi ricetta che scriva una chiave intermedia non protetta o una password di output vuota solo perché il client ha poi accettato il file. Un pacchetto leggibile con la protezione rimossa è un esito peggiore del guasto di importazione con cui ha iniziato.
Confermi che il client ha importato il file che ha creato
Un'analisi pulita in un terminale dimostra che il contenitore è valido. Non dimostra che il client lo abbia scelto, perché un profilo residuo può continuare a puntare al vecchio file, e alcuni client mettono in cache un'identità importata con un nome che non ha scelto.
Stampi l'identità che sta per importare e la confronti con ciò che il client mostra nella sua vista dei certificati.
openssl pkcs12 -in vpn-identity-aes.p12 -clcerts -nokeys -passin file:new.pass \
| openssl x509 -noout -subject -dates -fingerprint -sha256Rimuova prima la voce di profilo obsoleta, poi importi. Se il client registra il soggetto o l'impronta che ha caricato, li confronti con la riga sopra; se mostra solo un nome descrittivo, controlli invece la data di scadenza, perché è più difficile confonderla con un altro certificato dello stesso emittente.
Il riferimento PKCS12 elenca le opzioni di provider, passphrase e output usate qui. Il punto è tenere il provider legacy fuori dall'ambiente del client: misuri con esso, distribuisca senza, e lasci la chiave privata protetta sul disco.