или же
я есть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?