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ć?

tkpl
źródło
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.

Robert L.
źródło
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!

tkpl
źródło
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.

张 俊
źródło
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.

jww
źródło
6

Utwórz certyfikat CA

openssl genrsa -out privateKey.pem 4096
openssl req -new -x509 -nodes -days 3600 -key privateKey.pem -out caKey.pem
Pravind Kumar
źródło
5

Usuń wszelkie spacje na początku pliku .key.

johnnycardy
źródło
5

Rozdzielczość po mojej stronie. Zmień kodowanie na UTF8 bez BOM

Kosmo Para
źródło
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.

Rafael ZB Bravo
źródło
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.

Dhruvil Shah
źródło
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

aris
źródło
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.

Ionut Stoica
źródło
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.

gregn3
źródło
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.

Paul Dejean
źródło
-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

Dylan B.
źródło