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

92

У меня есть файл .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а затем вставил правильное содержимое.
Райан

Ответы:

64

Откройте файл ключа в Notepad ++ и проверьте кодировку. Если указано UTF-8-BOM, измените его на UTF-8. Сохраните файл и попробуйте еще раз.

Роберт Л.
источник
2
Что делать, если я использую Mac?
Эрнест Замельчик
6
Используйте Visual Studio Code - вы можете легко изменить кодировку с помощью нижней панели инструментов!
Лука Герси,
2
Боже мой! СПАСИБО! Я бы никогда не понял этого методом проб и ошибок, исправил проблему для меня!
Микаэль Дайреборг Хансен,
Это было для меня. Благодарность!
Freeman Helmuth,
3
GoDaddy создает закрытые ключи "generated-private-key.txt" с префиксом BOM, что вызывает эту проблему. По крайней мере, на Mac при сбросе ключевого текста с помощью cat не отображалась спецификация, а при просмотре с меньшими затратами. Я использовал 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
Что-то уже работает правильно с «плохим» форматом (то есть с неизмененными заголовками), поэтому это временное решение, которое обязательно сломает то, что уже работало нормально, например, обратный прокси-сервер, который не дает сбой из-за отсутствия тех, которые вручную -отредактированные верхние и нижние колонтитулы. Ура!
alejandrob
32

ваш файл .key содержит недопустимые символы. вы можете проверить файл .key следующим образом:

# file server.key

вывод "server.key: UTF-8 Unicode (with BOM) text" означает, что это простой текст, а не файл ключа. Правильный вывод должен быть "server.key: PEM RSA private key".

используйте команду ниже, чтобы удалить недопустимые символы:

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

New_server.key должен быть правильным.

Для получения более подробной информации щелкните здесь , спасибо за сообщение.

张 俊
источник
1
file server.keyэта команда помогла мне разобраться в проблеме. Спасибо.
itsHarshad
Кажется, что команда tail добавила странные символы форматирования в мой ключевой файл. Не уверен, почему это так.
Райанвебджексон
Это в сочетании с ответом @tkpl, похоже, устранило ошибки для меня.
Райанвебджексон
Это сэкономило мне несколько часов и кучу волос.
Фелипе Гужмао,
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переключение между кодировками.

jww
источник
6

Создать сертификат CA

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Правинд Кумар
источник
5

Удалите все пробелы в начале файла .key.

Джонникарди
источник
5

Разрешение на моей стороне. Изменить кодировку на UTF8 без спецификации

Kosmo Para
источник
2

Я использую Windows 10, и я сохранил свой ключ в кодировке Windows1252, и у меня это сработало. По другому вопросу StackOverflow некоторые люди исправляли это с помощью UTF-8 с спецификацией .

Другими словами, это может быть кодировка файла.

Рафаэль З. Б. Браво
источник
1

Возможно, самого закрытого ключа нет в файле. Я тоже столкнулся с той же проблемой, но проблема в том, что в файле нет закрытого ключа.

Дхрувил Шах
источник
1

это может произойти, если вы пытаетесь использовать свой открытый ключ для создания сертификата вместо своего личного ключа. вы должны использовать закрытый ключ

Aris
источник
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-----

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

gregn3
источник
0

В нашем случае проблема вызвана тем, что закрытый ключ, который мы пытались использовать, был зашифрован парольной фразой.

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

Пол Дежан
источник
-6

Почему бы не использовать cetificate bot

yum install epel-release

yum установить certbot-nginx

Получение сертификата

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

Дилан Б.
источник