Не удается получить закрытый ключ с 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. После того как была выбрана правильная версия кодирования для загрузки нового сертификата, ошибка была решена.
Надеюсь, это поможет новым пользователям:-)