или же

я естьCertificates.p12 файл, который я хочу преобразовать вcertificates.pem содержащий незашифрованный закрытый ключ в формате PKCS # 1. Ранее я мог сделать это, запустив:

openssl pkcs12 -in Certificates.p12 -out certificates.pem -nodes -clcerts

Результирующийcertificates.pem файл имеетPRIVATE KEY Блок PEM, как и ожидалось. Тем не мение,библиотека, которую я использую не понимает этот блок PEM, потому что ожидает, что он будет закрытым ключом PKCS # 1. Структура ASN.1 закрытого ключа PKCS # 1 определяетсяRFC 3447 как:

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
}

Плохой блок закрытых ключей в моемcertificates.pem не имеет этой структуры PKCS # 1! Вместо этого его структура ASN.1 выглядит следующим образом:

$ 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...

Какой формат выше?Документация дляopenssl pkcs12 только смутно говорит, что его вывод «записан в формате PEM». Мне нужна более надежная гарантия того, что блок PEM закрытого ключа имеет формат PKCS # 1.

Странно то, чтоopenssl rsa понимает странный формат «плохого» закрытого ключа и может преобразовать его в правильную структуру PKCS # 1 с помощью:

openssl rsa -in badprivatekey.pem -out goodprivatekey.pem

Несмотря на то чтоopenssl rsa понимает входной файл, инструмент, кажется, не в состоянии сказать мнеПочемуто есть каков формат входного файла.

Каков выходной форматopenssl pkcs12? В частности, каков формат блока закрытого ключа? Как мне сделатьopenssl pkcs12 вывести правильный закрытый ключ PKCS # 1?

Ответы на вопрос(1)

Ваш ответ на вопрос