Nie można załadować klucza prywatnego. (Procedury PEM: PEM_read_bio: brak linii startowej: pem_lib.c: 648: Oczekiwanie: DOWOLNY KLUCZ PRYWATNY)


92

Mam plik .key, który jest plikiem klucza prywatnego w formacie PEM. Nie stworzyłem tego pliku, ale skądś go dostałem.

Chciałem zobaczyć jego skrót MD5 za pomocą narzędzia openssl, takiego jak poniższe polecenie.

openssl rsa -in server.key -modulus -noout

Ale to generuje poniżej błąd.

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

Oto kilka asn1parse pliku .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

 ...

Czy jest coś więcej, co mogę spróbować?


2
Jaki jest dokładny nagłówek / stopka pliku PEM? Możesz otrzymać ten błąd, jeśli wysyłasz klucz publiczny. Ponadto polecenie, które podałeś, nie da skrótu MD5. Daje moduł klucza.
— gtrig

Kiedyś scpkopiowałem plik z Windows do Ubuntu. Aby to naprawić, usunąłem plik w systemie Ubuntu, utworzyłem tam nowy pusty plik i użyłem, vima następnie wkleiłem poprawną zawartość.
— Ryan

Odpowiedzi:


63

Otwórz plik klucza w Notepad ++ i sprawdź kodowanie. Jeśli jest na nim napis UTF-8-BOM, zmień go na UTF-8. Zapisz plik i spróbuj ponownie.


2
A jeśli używam Maca?
— Ernest Zamelczyk

6
Użyj Visual Studio Code - możesz łatwo zmienić kodowanie za pomocą dolnego paska narzędzi!
— Luca Ghersi

2
O mój dobry Boże! DZIĘKUJĘ CI! Nigdy bym tego nie wymyślił metodą prób i błędów, rozwiązałem problem!
— Mikael Dyreborg Hansen

To było to dla mnie. Dzięki!
— Freeman Helmuth

3
GoDaddy tworzy klucze prywatne „generated-private-key.txt” z prefiksem BOM, co powoduje ten problem. Przynajmniej na komputerze Mac zrzucenie klucza tekstu z kotem nie spowodowało wyświetlenia zestawienia komponentów, ale sprawdzenie go z mniejszą liczbą. Użyłem BBEdit do usunięcia BOM, ale każdy, kto może zmienić format lub odciąć pierwsze cztery bajty, zadziała.
— Seth Noble

55

Zmieniłem nagłówek i stopkę pliku PEM na

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

i

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

Wreszcie działa!


1
Możesz również dodać -inform pemdo polecenia, aby uzyskać ten sam wynik. Np openssl rsa -in server.key -modulus -noout -inform pem.
— Simon Woodside

1
Sprawdź stackoverflow.com/questions/54994641/ ... jeśli to rozwiązuje twój problem
— qstack

Coś już działa poprawnie z "złym" formatem (tj. Niezmienione nagłówki), więc jest to prowizoryczne rozwiązanie, które zepsuje coś, co już działało dobrze, na przykład odwrotne proxy, które nie ulega awarii z powodu braku tych ręcznie -edytowane nagłówki i stopki. Yipes!
— alejandrob

32

Twój plik .key zawiera niedozwolone znaki. możesz sprawdzić plik .key w ten sposób:

# file server.key

wyjście „server.key: tekst Unicode UTF-8 (z BOM)” oznacza, że ​​jest to zwykły tekst, a nie plik klucza. Prawidłowe dane wyjściowe powinny mieć postać „server.key: klucz prywatny PEM RSA”.

użyj poniższego polecenia, aby usunąć niedozwolone znaki:

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

Nowy_serwer.klucz powinien być poprawny.

Aby uzyskać więcej informacji, kliknij tutaj , dzięki za post.


1
file server.keyto polecenie pomogło mi rozwiązać problem. Dzięki.
— itsHarshad

Wydaje się, że polecenie tail dodało dziwne znaki formatujące do mojego pliku klucza. Nie jestem pewien, dlaczego tak się dzieje.
— ryanwebjackson

Wydaje się, że to w połączeniu z odpowiedzią @tkpl wyeliminowało dla mnie błędy.
— ryanwebjackson

Zaoszczędziło mi to kilka godzin i mnóstwo włosów.
— Felipe Gusmao

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

To, że wydaje się być w porządku, asn1parseprowadzi mnie do przekonania, że nie jest to kodowanie PEM.


Czy jest coś więcej, co mogę spróbować?

Ponieważ wygląda na ASN.1, spróbuj:

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

Zwróć uwagę, -inform DERaby przełączać się między kodowaniami.


6

Utwórz certyfikat CA

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



2

Jestem na Windows 10 i zapisałem swój klucz z kodowaniem Windows1252 i zadziałało. W przypadku innego pytania StackOverflow, niektórzy ludzie naprawiali to za pomocą UTF-8 z BOM .

Innymi słowy, może to być kodowanie pliku.


1

Być może sam klucz prywatny nie występuje w pliku. Miałem ten sam problem, ale problem polega na tym, że w pliku nie ma klucza prywatnego.


1

może się to zdarzyć, jeśli próbujesz użyć klucza publicznego do utworzenia certyfikatu zamiast klucza prywatnego. powinieneś użyć klucza prywatnego


0

Miałem ten sam problem dzisiaj i zauważyłem, że dzieje się tak, gdy właściciel / grupa pliku nie jest jedyną uruchomioną aplikacją, która czyta klucz. Może to też twój problem.


0

Żaden z pozostałych odpowiedzi wydawało poprawne w moim przypadku, jednak znalazłem prawdziwą odpowiedź tutaj

Mój id_rsaplik był już w formacie PEM, wystarczyło dodać .pemrozszerzenie do nazwy pliku.

Dzięki

Możliwe opcje openssl rsa -informparametru to:PEM DER

PEMZakodowany plik jest zwykły tekst kodowania, który wygląda mniej więcej tak:

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

While DERto binarny format kodowania.


0

W naszym przypadku przyczyną problemu jest to, że klucz prywatny, którego próbowaliśmy użyć, został zaszyfrowany za pomocą hasła.

Musieliśmy odszyfrować klucz prywatny za pomocą, ssh-keygen -pzanim mogliśmy użyć klucza prywatnego z narzędziem wiersza poleceń openssl.


-6

Dlaczego nie skorzystać z bota cetificate

yum install epel-release

yum zainstaluj certbot-nginx

Uzyskanie certyfikatu

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.