Не вдається завантажити приватний ключ. (Процедури PEM: PEM_read_bio: немає рядка старту: pem_lib.c: 648: Очікується: БУДЬ-ЯКИЙ ПРИВАТНИЙ КЛЮЧ)


93

У мене є файл .key, який є форматованим у PEM файлом із закритим ключем. Я не створив цей файл, але отримав його звідкись.

Я хотів побачити його хеш MD5 за допомогою інструменту openssl, як показано нижче.

openssl rsa -in server.key -modulus -noout

Але це породжує помилку нижче.

unable to load Private Key
13440:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib.c:648:Expecting: ANY PRIVATE KEY

Ось деякі asn1parse файлу .key.

openssl asn1parse -in server.key
0:d=0  hl=4 l= 603 cons: SEQUENCE
4:d=1  hl=2 l=   1 prim: INTEGER           :00
7:d=1  hl=3 l= 129 prim: INTEGER           :C141201603899993919CBAA56985E9C7
C6A2AF713A02F5FE88D38CEFBED9304599689280B84B0AB577A9719CA20DDA1246A894AF397A2C57
EE5A582B036CC367E3667454DCD82DBDBF187C35FE39F61C71B517DDDF576F5471B4EC2E045E0F9D
619F5616C4E832F00CBD0DBF41B4BA3CBC4B4B603AE1FE61965917DA732E0DEF
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
144:d=1  hl=3 l= 128 prim: INTEGER           :1687B9AE67562CEDEBDD7A531B84CDB7
093CE138519B93C34B7F626076FF0A262B16EA71904ACB6251A39307C04ADE202055BA13DD9F1539
6123EE408183361A9BC08B9413FA360EA928E48CC3F52B33ACF2980758F02BA2139F652F30A257C2
2E45D7C25835FC4D22B9ECECC12AB632318D4F47E1EBDAD9781B96BCFF03A2D1

 ...

Чи можу я ще щось спробувати?


2
Який точний верхній / нижній колонтитул файлу PEM? Ви можете отримати цю помилку, якщо надсилаєте відкритий ключ. Крім того, команда, яку ви перелічили, не дасть хеш MD5. Це дасть модуль ключа.
gtrig

Раніше я scpкопіював файл із Windows на Ubuntu. Щоб виправити це, я видалив файл в Ubuntu, створив там новий порожній файл, використав, vimа потім вставив правильний вміст.
Райан

Відповіді:


66

Відкрийте файл ключа в Notepad ++ і перевірте кодування. Якщо на ньому написано UTF-8-BOM, змініть його на UTF-8. Збережіть файл і повторіть спробу.


2
Що робити, якщо я використовую mac?
Ернест Замельчик

6
Використовуйте Visual Studio Code - ви можете легко змінити кодування за допомогою нижньої панелі інструментів!
Лука Герсі

2
Боже мій Боже! ДЯКУЮ! Я ніколи б не зрозумів, що методом спроб і помилок вирішив проблему для мене!
Мікаель Діреборг Хансен,

Це було для мене. Дякую!
Фрімен Гельмут,

4
GoDaddy виробляє приватні ключі "generated-private-key.txt" із префіксом специфікації, що і спричиняє цю проблему. Принаймні на Mac, скидання ключового тексту з котом не відображало специфікацію, але дивлячись на нього з меншою кількістю. Я використав BBEdit для видалення специфікації, але будь-який, який може змінити формат або відрубати перші чотири байти, буде працювати.
Сет Ноубл,

55

Я змінив верхній і нижній колонтитул файлу PEM на

-----BEGIN RSA PRIVATE KEY-----

і

-----END RSA PRIVATE KEY-----

Нарешті, це працює!


1
Ви також можете додати -inform pemдо команди, щоб отримати той самий результат. Напр openssl rsa -in server.key -modulus -noout -inform pem.
Саймон Вудсайд,

1
Перевірте stackoverflow.com/questions/54994641/…, якщо це вирішує вашу проблему
qstack

Щось уже працює коректно з "поганим" форматом (тобто незміненими заголовками), отже, це імпровізоване рішення, яке зобов'язане зламати щось, що вже працювало нормально, наприклад, зворотний проксі-сервер, який не спрацьовує через відсутність таких вручну -редаговані колонтитули. Yipes!
alejandrob

32

ваш файл .key містить заборонені символи. Ви можете перевірити файл .key таким чином:

# file server.key

вивести "server.key: UTF-8 Юнікод (із специфікацією) текст" означає, що це звичайний текст, а не файл ключа. Правильним результатом має бути "server.key: закритий ключ PEM RSA".

використовуйте команду нижче, щоб видалити нелегальні символи:

# tail -c +4 server.key > new_server.key

Ключ new_server.key повинен бути правильним.

Щоб отримати докладнішу інформацію, натисніть тут , дякую за допис.


1
file server.keyця команда допомогла мені отримати проблему. Дякую.
itsHarshad

Здається, команда tail додала до мого ключового файлу дивні символи форматування. Не знаю, чому це буде.
ryanwebjackson

Здається, це в поєднанні з відповіддю @tkpl усунуло помилки для мене.
ryanwebjackson

Це заощадило мені кілька годин і дуже багато волосся.
Феліпе Гусмао

7

Створіть сертифікат ЦС

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem

6
> I have a .key file which is PEM formatted private key file.
> ...
> Here's some asn1parse of the .key file...

Те, що це здається нормальним, asn1parseзмушує мене вважати, що його не кодує PEM.


Чи можу я ще щось спробувати?

Оскільки це, здається, ASN.1, спробуйте:

$ openssl rsa -in server.key -inform DER -modulus -noout

Зверніть увагу -inform DERна перемикання між кодуваннями.




2

Я працюю в Windows 10, і я зберіг свій ключ за допомогою кодування Windows1252, і він працював у мене. В іншому питанні StackOverflow деякі люди виправляли це за допомогою UTF-8 за допомогою специфікації .

Іншими словами, це може бути кодування файлу.


1

Можливо, сам приватний ключ відсутній у файлі. Я також стикався з тією ж проблемою, але проблема полягає в тому, що у файлі немає приватного ключа.


1

це може статися, якщо ви намагаєтесь використовувати свій відкритий ключ для створення сертифіката замість приватного ключа. ви повинні використовувати закритий ключ


0

Була та сама проблема сьогодні, і ми помітили, що це відбувається, коли власник / група файлів не є однією запущеною програмою, яка читає ключ. Можливо, це теж ваша проблема.


0

Жодна з інших відповідей у ​​моєму випадку не здалася правильною, однак справжню відповідь я знайшов тут

Мій id_rsaфайл уже був у форматі PEM, мені просто потрібно було додати .pemрозширення до імені файлу.

Завдяки

Можливі варіанти openssl rsa -informпараметра:PEM DER

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

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

While DER- це двійковий формат кодування.


0

У нашому випадку проблемою стало те, що приватний ключ, який ми намагалися використовувати, був зашифрований парольною фразою.

Нам довелося розшифрувати приватний ключ за допомогою, ssh-keygen -pперш ніж ми змогли використовувати приватний ключ за допомогою інструменту командного рядка openssl.


-6

Чому б не використовувати бота із сертифікатами

yum встановити epel-release

ням встановити certbot-nginx

Отримання сертифіката

certbot --nginx -d example.com -d www.example.com

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.