Jak uzyskać plik .pem z plików .key i .crt?

Odpowiedzi:

799

Twoje klucze mogą być już w formacie PEM, ale mają tylko nazwy .crt lub .key.

Jeśli treść pliku zaczyna się od -----BEGINi możesz go odczytać w edytorze tekstu:

Plik wykorzystuje base64, który można odczytać w ASCII, a nie w formacie binarnym. Certyfikat jest już w formacie PEM. Po prostu zmień rozszerzenie na .pem.

Jeśli plik jest binarny:

W przypadku server.crt użyłbyś

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

W przypadku server.key użyj openssl rsazamiast openssl x509.

Server.key jest prawdopodobnie twoim prywatnym kluczem, a plik .crt to zwrócony, podpisany certyfikat x509.

Jeśli dotyczy to serwera WWW i nie można określić ładowania osobnego klucza prywatnego i publicznego:

Może być konieczne połączenie dwóch plików. Do tego celu:

cat server.crt server.key > server.includesprivatekey.pem

Poleciłbym nazwać pliki słowem „includeesprivatekey”, aby pomóc Ci zarządzać uprawnieniami, które masz z tym plikiem.

maxwellb
źródło
2
Sprawdź format server.key. Zakładałem tylko, że to RSA. Ale czytanie pierwszego wiersza pliku prawdopodobnie to powie.
maxwellb
10
Tylko jedna głowa, która cat server.crt server.key > server.pemnie umieści otwartego komentarza we własnej linii, co wydaje się być wymogiem. Przesyłki kurierskie dały mi piekło i zajęło mi wiele godzin, aby dowiedzieć się, co się dzieje.
Graham Walters
1
Dzięki Graham. Różne narzędzia będą generować pliki w różny sposób, a ostatecznie pewna weryfikacja jest dobra. Gdy wykonałem te kroki, pliki zakończyły się na przykład znakiem nowej linii.
maxwellb
Porada dotycząca łączenia plików .crt i .key była bardzo pomocna. Chciałem użyć mojego certyfikatu z stunnel3, ale nie miał sposobu na określenie pliku klucza. Wykorzystanie konkatenacji działało. (W rzeczywistości, ponieważ stunnel3 jest programem Perla, sam dodałem do niego opcję odczytu pliku klucza. Jednak, ponieważ później zobaczyłem, że konkatenacja działa, przywróciłem stunnel3 jego oryginalny kod.)
LS,
2
Tylko server.crt server.key > server.includesprivatekey.pemgarść stwierdzenia, że ​​cat jest przydatny dla SSL z haproxy 1.5.
jimm101
224

Musiałem to zrobić dla AWS ELB. Po tym, jak wiele razy zostałem pobity przez dialog, w końcu to zadziałało:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

Dzięki NCZ

Edycja: Jak mówi @floatingrock

W AWS nie zapomnij o dodaniu nazwy pliku file://. Będzie to wyglądać następująco:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html

slf
źródło
19
W AWS nie zapomnij o dodaniu nazwy pliku file://. Będzie to wyglądać następująco:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock
1
Drugie polecenie nic nie robi, jeśli twoje wejście jest plikiem pem, więc zakładając, że tak, potrzebujesz tylko pierwszego polecenia
Kristofer
Niesamowite! To działa dobrze dla mnie! Właśnie przekonwertowałem moje pliki .key i .crt do .pem za pomocą linii kodu, a następnie przesłałem (kopiuj / wklej) za pomocą konsoli AWS. Dzięki!
Diego D,
79

pemPlik zawiera certyfikat i klucz prywatny. To zależy od formatu twojego certyfikatu / klucza, ale prawdopodobnie jest to tak proste:

cat server.crt server.key > server.pem
coś
źródło
wciąż otrzymuję-bash: server.key.pem: Permission denied
tq
2
@tq: Oznacza to, że nie możesz czytać ani zapisywać tego pliku.
coś
dziękuję @sth będzie szukał pozwolenia. ale robiłem to za pomocą poleceń sudo
tq
8
@tq: cat server.crt server.key | sudo tee server.pem
dimir
2
watchout dla brakujących znaków nowej linii nasz plik PEM mogło zniekształcone linie takie jak ----- END ŚWIADECTWA ---------- ----- BEGIN CERTIFICATE
Wolfgang Fahl
24

Dodatkowo, jeśli nie chcesz, aby prosił o hasło, musisz uruchomić następującą komendę:

openssl rsa -in server.key -out server.key
Rahul
źródło
9
Jeśli chcesz, aby plik zaczynał się od -----BEGIN RSA PRIVATE KEY-----i miał taki, który zaczyna się od -----BEGIN ENCRYPTED PRIVATE KEY-----, jest to polecenie, którego chcesz użyć.
Philippe Gerber
18

jest to najlepsza opcja do utworzenia pliku .pem

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
GOrozco58
źródło
4

Zauważyłem: jeśli używasz openssl do generowania certyfikatów, przechwytuje zarówno część tekstową, jak i część certyfikatu base64 w pliku crt. Ścisły format pem mówi ( definicja wiki ), że plik powinien zaczynać się i kończyć na BEGIN i END.

.pem - (Mail Enhanced Mail) Certyfikat DER zakodowany w standardzie Base64, zawarty między „----- ROZPOCZNIJ CERTYFIKAT -----” i „----- ZAKOŃCZ CERTYFIKAT -----”

Tak więc dla niektórych bibliotek (napotkałem to w Javie), które oczekują ścisłego formatu pem, wygenerowany crt nie przejdzie walidacji jako „nieprawidłowy format pem”.

Nawet jeśli skopiujesz lub grepujesz linie za pomocą BEGIN / END CERTIFICATE i wkleisz go do pliku cert.pem, to powinno działać.

Oto, co robię, niezbyt czyste, ale działa dla mnie, w zasadzie filtruje tekst, zaczynając od linii BEGIN:

grep -A 1000 BEGIN cert.crt> cert.pem

adityalad
źródło
1
Inną opcją jest po prostu przekazanie nie wymagającego certyfikatu openssl x509. cat certificate.crt | openssl x509 > certificate.pem
Wyśle
Jeśli chcesz uzyskać wszystko, od „BEGIN” do końca pliku, jest to zadanie dla sed. W szczególności chcesz coś sed -n '/--BEGIN/,$p' cert.crtw tym przypadku. Aby to wyjaśnić: „-n” mówi sedowi, aby nie drukował niczego domyślnie, a następnie wyrażenie zakresu /--BEGIN/,$powoduje, że ppolecenie (print) stosuje się do linii między pierwszą linią, która zawiera, --BEGINa końcem pliku ( $).
dannysauer
4

Próbowałem przejść od chrzestnego do silnika aplikacji. Jaka była sztuczka przy użyciu tej linii:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

Dokładnie tak, jak jest, ale zastąpienie nazwy moją nazwą domeny (nie żeby to naprawdę miało znaczenie)

Odpowiedziałem na wszystkie pytania dotyczące nazwy zwyczajowej / organizacji jako www.name.com

Następnie otworzyłem csr, skopiowałem go, wkleiłem w go tatusiu, następnie pobrałem, rozpakowałem, przeszedłem do rozpakowanego folderu z terminalem i wprowadziłem:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

Następnie skorzystałem z tych instrukcji z Trouble z Google Apps Custom Domain SSL , które były:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

dokładnie tak, jak jest, poza tym, że zamiast privateKey.key użyłem name.unencrypted.priv.key, a zamiast www_moja_domena_com.crt użyłem name.crt

Następnie przesłałem public.pem do konsoli administracyjnej w celu uzyskania „certyfikatu X.509 zakodowanego w PEM”, i przesłałem private.pem dla „prywatnego klucza RSA zakodowanego w PEM”.

.. I to w końcu zadziałało.

Społeczność
źródło
4

Próba przesłania certyfikatu GoDaddy do AWS kilkakrotnie mi się nie udało, ale ostatecznie było to dość proste. Nie trzeba konwertować niczego na .pem. Musisz tylko upewnić się, że dołączasz certyfikat pakietu GoDaddy do parametru łańcucha, np

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

Aby usunąć poprzednie nieudane przesyłanie, możesz to zrobić

aws iam delete-server-certificate --server-certificate-name mypreviouscert
skensell
źródło
Nie zadziałało to dla mnieAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis
4
  1. Pobierz certyfikat z tymczasowego portalu przez appleId,
  2. Wyeksportuj certyfikat z łańcucha kluczy i podaj nazwę (Certyfikaty.p12),
  3. Otwórz folder terminala i goto, w którym zapisujesz powyżej pliku Certificates.p12,
  4. Uruchom poniższe polecenia:

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes,

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Twój plik .pem jest gotowy „pushcert.pem”.
Ashvin Ajadiya
źródło
0
  • Otwórz terminal.
  • Przejdź do folderu, w którym znajduje się twój certyfikat.
  • Wykonaj poniższe polecenie, zastępując nazwę certyfikatem.

openssl pkcs12 -w YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Mam nadzieję, że to zadziała !!
Dhaval H. Nena
źródło