Un P12 antiguo falla en OpenSSL 3: ¿contraseña incorrecta o cifrado heredado?
Distinga una frase de contraseña mal escrita de un paquete RC2 antiguo que OpenSSL 3 se niega a desempaquetar, y luego vuelva a sellar el archivo sin quitar la protección de la clave.
El diálogo de importación toma su contraseña, gira un momento y luego dice que no puede leer el paquete. Nada en ese mensaje le dice si escribió mal la frase de contraseña o si el archivo se selló con un cifrado que el cliente ya no incluye. Son fallos distintos con soluciones distintas, y elegir mal lleva a una degradación del cliente que solo pospone la decisión. Observar la etapa en la que se detiene el cliente los separa en aproximadamente un minuto.
Qué ocurre entre el diálogo y la lista de certificados
Un archivo .p12 es un contenedor, no un certificado. Dentro hay una o más bolsas de certificados y una bolsa de clave privada cifrada con una clave derivada de su contraseña, además de una comprobación de integridad llamada MAC sobre todo el archivo. Abrirlo significa verificar esa MAC, descifrar la bolsa de la clave y emparejar el certificado con la clave que sale de ella.
El problema de contraseña llega en el paso de la MAC. El problema de cifrado llega más tarde, cuando hay que desenvolver la bolsa de la clave y la compilación que lo hace no tiene implementación del algoritmo indicado en el archivo.
El segundo caso es habitual en los sistemas actuales porque OpenSSL 3 trasladó un grupo de algoritmos antiguos a un proveedor legacy opcional. Los paquetes exportados por OpenSSL 1.x solían sellar los certificados con RC2 de 40 bits y la clave privada con Triple DES de tres claves. Una compilación predeterminada de OpenSSL 3 sigue verificando la MAC con su contraseña correcta y luego falla en la bolsa, así que la contraseña nunca estuvo mal y volver a escribirla no cambia nada.
Lea el contenedor sin escribir ninguna clave
Pida a la compilación de OpenSSL de su propia máquina que analice el archivo y lea el punto en el que se rinde. Una inspección sin archivo de salida deja la clave cifrada en el disco, y esa es la única razón por la que este paso es seguro en un host compartido.
openssl pkcs12 -in vpn-identity.p12 -info -nooutEn un paquete legacy con la contraseña correcta, esto imprime los atributos de la bolsa y luego se detiene con digital envelope routines::unsupported. Con una contraseña incorrecta obtiene Mac verify error: invalid password? antes de que se lea ninguna bolsa. Los dos mensajes apuntan en direcciones opuestas, y esa es exactamente la información que el cliente ocultó.
Si el fallo es el del algoritmo no admitido, ejecute el mismo comando otra vez con -legacy añadido y nada más cambiado. Ese indicador carga el proveedor legacy solo para ese proceso. No hace que el cliente VPN analice paquetes antiguos, no toca la política criptográfica del sistema y es una medición, no una reparación, porque el archivo sigue teniendo que sustituirse.
Qué error corresponde a qué etapa
Una tabla breve mantiene separados los tres resultados, y la redacción importa más que el lugar donde apareció el diálogo.
| 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 texto como not enough data o header too long no pertenece a ninguno de los dos primeros grupos. Es un problema de formato: un archivo DER renombrado a .pem, una copia estropeada por un editor que reescribió los finales de línea, o una descarga incompleta. Compare la suma de comprobación con la que envió el emisor antes de empezar a mirar cifrados.
Trate Mac verify error solo como evidencia sobre la contraseña. Significa que la MAC calculada a partir de lo que escribió no coincide con el valor guardado, lo que ocurre con una errata, con una contraseña en caché de una importación anterior o con un archivo reexportado con otra frase de contraseña. No dice nada sobre si los algoritmos de dentro son antiguos.
Construya un paquete que el cliente pueda abrir de verdad
Una vez que el analizador legacy confirma que el archivo es correcto, la solución duradera es un reemplazo cuyos algoritmos admita el cliente de destino: AES-256-CBC para las bolsas de clave y certificados, PBKDF2 con SHA-256 para la derivación y SHA-256 para la MAC. Su administrador de PKI puede exportarlo del mismo material de clave, y el certificado de dentro sigue siendo el que sus servidores ya confían.
Cuando tenga que convertir en local, pida a la herramienta pkcs12 que vuelva a sellar las bolsas en lugar de volcarlas primero. Mantenga ambas frases de contraseña fuera del historial del intérprete leyéndolas de un archivo.
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 conversión correcta no dice nada sobre la caducidad, el uso de la clave, la coincidencia de la clave privada ni sobre si el servidor confía en la cadena emisora. Reempaquetar es un cambio de transporte, no una renovación, y cada uno de esos puntos sigue necesitando su propia comprobación.
Omita cualquier receta que escriba una clave intermedia sin protección o una contraseña de salida vacía solo porque después el cliente aceptó el archivo. Un paquete legible con la protección eliminada es un resultado peor que el fallo de importación con el que empezó.
Confirme que el cliente importó el archivo que usted creó
Un análisis limpio en un terminal demuestra que el contenedor es válido. No demuestra que el cliente lo haya elegido, porque un perfil sobrante puede seguir apuntando al archivo antiguo, y algunos clientes guardan en caché una identidad importada con un nombre que usted no eligió.
Imprima la identidad que está a punto de importar y compárela con lo que el cliente muestra en su vista de certificados.
openssl pkcs12 -in vpn-identity-aes.p12 -clcerts -nokeys -passin file:new.pass \
| openssl x509 -noout -subject -dates -fingerprint -sha256Quite primero la entrada de perfil obsoleta y luego importe. Si el cliente registra el sujeto o la huella que cargó, compárelo con la línea de arriba; si solo muestra un nombre descriptivo, compruebe en su lugar la fecha de caducidad, ya que es más difícil confundirla con otro certificado del mismo emisor.
La referencia de PKCS12 enumera las opciones de proveedor, frase de contraseña y salida que se usan aquí. La clave es mantener el proveedor legacy fuera del entorno del cliente: mida con él, entregue sin él y deje la clave privada protegida en el disco.