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?

questionAnswers(1)

yourAnswerToTheQuestion