Не удается получить закрытый ключ с openssl (нет стартовой строки: pem_lib.c: 703: Ожидание: ЛЮБОЙ ЧАСТНЫЙ КЛЮЧ)

У меня есть файл .key, когда я делаю

openssl rsa -text -in file.key

Я получаю

unable to load Private Key
140000419358368:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY

Также у меня есть файл .cer, и когда я делаю

openssl x509 -text -in file.cer

Я получаю

unable to load certificate
140387178489504:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

Но если, как указано здесь, я запускаю команду как:

openssl x509 -text -inform DER -in file.cer

Я получаю

Certificate:
    Data:
        Version: 3 (0x2)
        Some more information
        ...
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEF
...
-----END CERTIFICATE-----

Но это не работает с ключом, потому что когда я запускаю

openssl rsa -text -inform DER -in aaa010101aaa__csd_10.key

Я получаю

unable to load Private Key
140004844304032:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1337:
140004844304032:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:849:
140004844304032:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:769:Field=version, Type=RSA
140004844304032:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
140004844304032:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1337:
140004844304032:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:849:
140004844304032:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:769:Field=version, Type=PKCS8_PRIV_KEY_INFO

Как получить закрытый ключ и его сертификат?

Ответ 1

Похоже, у вас есть сертификат в формате DER вместо PEM. Вот почему он работает правильно, когда вы предоставляете аргумент командной строки -inform PEM (который сообщает openssl, какой формат ввода ожидать).

Вероятно, ваш секретный ключ использует ту же самую кодировку. Похоже, что команда openssl rsa также принимает аргумент -inform, поэтому попробуйте:

openssl rsa -text -in file.key -inform DER

A PEM закодированный файл представляет собой текстовую кодировку, которая выглядит примерно так:

-----BEGIN RSA PRIVATE KEY-----
MIGrAgEAAiEA0tlSKz5Iauj6ud3helAf5GguXeLUeFFTgHrpC3b2O20CAwEAAQIh
ALeEtAIzebCkC+bO+rwNFVORb0bA9xN2n5dyTw/Ba285AhEA9FFDtx4VAxMVB2GU
QfJ/2wIRANzuXKda/nRXIyRw1ArE2FcCECYhGKRXeYgFTl7ch7rTEckCEQDTMShw
8pL7M7DsTM7l3HXRAhAhIMYKQawc+Y7MNE4kQWYe
-----END RSA PRIVATE KEY-----

Пока DER - это формат двоичного кодирования.

Обновление

Иногда ключи распространяются в формате PKCS # 8 (который может быть закодирован PEM или DER). Попробуйте это и посмотрите, что вы получите:

openssl pkcs8 -in file.key -inform der

Ответ 2

Мои два цента: столкнулся с тем же сообщением об ошибке в RHEL7.3 во время запуска команды openssl с корневым сертификатом CA. При этом, при загрузке сертификата с сервера AD, кодировка была выбрана как DER вместо Base64. После того как была выбрана правильная версия кодирования для загрузки нового сертификата, ошибка была решена.

Надеюсь, это поможет новым пользователям:-)