Como posso converter um .p12 em um .pem contendo um bloco de chave privada PKCS # 1 não criptografado?
eu tenho umCertificates.p12
arquivo que desejo converter para umcertificates.pem
contendo uma chave privada não criptografada no formato PKCS # 1. Eu já consegui fazer isso executando:
openssl pkcs12 -in Certificates.p12 -out certificates.pem -nodes -clcerts
O resultadocertificates.pem
arquivo tem umPRIVATE KEY
Bloco PEM, conforme o esperado. Contudo,a biblioteca que estou usando não entende esse bloco PEM, porque espera que seja uma chave privada PKCS # 1. A estrutura ASN.1 de uma chave privada PKCS # 1 é 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
}
O bloqueio de chave privada ruim no meucertificates.pem
não possui essa estrutura PKCS # 1! Em vez disso, sua estrutura ASN.1 se parece com isso:
$ 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...
Qual é o formato acima?A documentação paraopenssl pkcs12
apenas diz vagamente que sua saída é "escrita no formato PEM". Preciso de uma garantia mais forte de que o bloco PEM de chave privada está no formato PKCS # 1.
O estranho é queopenssl rsa
entende o formato estranho da chave privada "ruim" e pode convertê-la na estrutura PKCS # 1 correta com:
openssl rsa -in badprivatekey.pem -out goodprivatekey.pem
Apesaropenssl rsa
entende o arquivo de entrada, a ferramenta parece incapaz de me dizerporque, ou seja, qual é o formato do arquivo de entrada.
Qual é o formato de saída deopenssl pkcs12
? Especificamente, qual é o formato do seu bloco de chave privada? Como eu façoopenssl pkcs12
produzir uma chave privada PKCS # 1 correta?