¿Cómo puedo convertir un .p12 en un .pem que contiene un bloque de clave privada PKCS # 1 sin cifrar?
tengo unCertificates.p12
archivo que deseo convertir a uncertificates.pem
que contiene una clave privada sin cifrar en formato PKCS # 1. Anteriormente pude hacer esto ejecutando:
openssl pkcs12 -in Certificates.p12 -out certificates.pem -nodes -clcerts
La resultantecertificates.pem
el archivo tiene unPRIVATE KEY
Bloque PEM, como se esperaba. Sin embargo,la biblioteca que estoy usando no comprende este bloque PEM, porque espera que sea una clave privada PKCS # 1. La estructura ASN.1 de una clave privada PKCS # 1 está definida porRFC 3447 como:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
La mala clave privada bloqueada en micertificates.pem
no tiene esta estructura PKCS # 1! En cambio, su estructura ASN.1 se ve así:
$ openssl asn1parse -i -in badprivatekey.pem
0:d=0 hl=4 l=1212 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=2 l= 13 cons: SEQUENCE
9:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
20:d=2 hl=2 l= 0 prim: NULL
22:d=1 hl=4 l=1190 prim: OCTET STRING [HEX DUMP]:308204A...very long hex...
¿Cuál es el formato anterior?La documentación paraopenssl pkcs12
solo vagamente dice que su salida está "escrita en formato PEM". Necesito una garantía más fuerte de que el bloque PEM de clave privada está en formato PKCS # 1.
Lo extraño es queopenssl rsa
entiende el extraño formato de la clave privada "incorrecta" y puede convertirla a la estructura PKCS # 1 correcta con:
openssl rsa -in badprivatekey.pem -out goodprivatekey.pem
A pesar de queopenssl rsa
entiende el archivo de entrada, la herramienta parece incapaz de decirmepor qué, es decir, cuál es el formato del archivo de entrada.
¿Cuál es el formato de salida deopenssl pkcs12
? Específicamente, ¿cuál es el formato de su bloque de clave privada? Como hagoopenssl pkcs12
generar una clave privada PKCS # 1 correcta?