Jak mogę utworzyć plik PEM z certyfikatu SSL?
Oto pliki, które mam dostępne:
.crt
server.csr
server.key
Jak mogę utworzyć plik PEM z certyfikatu SSL?
Oto pliki, które mam dostępne:
.crt
server.csr
server.key
Odpowiedzi:
Twoje klucze mogą być już w formacie PEM, ale mają tylko nazwy .crt lub .key.
Jeśli treść pliku zaczyna się od -----BEGIN
i 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 rsa
zamiast 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.
cat server.crt server.key > server.pem
nie 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.
server.crt server.key > server.includesprivatekey.pem
garść stwierdzenia, że cat jest przydatny dla SSL z haproxy 1.5.
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
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/
pem
Plik 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
-bash: server.key.pem: Permission denied
Dodatkowo, jeśli nie chcesz, aby prosił o hasło, musisz uruchomić następującą komendę:
openssl rsa -in server.key -out server.key
-----BEGIN RSA PRIVATE KEY-----
i miał taki, który zaczyna się od -----BEGIN ENCRYPTED PRIVATE KEY-----
, jest to polecenie, którego chcesz użyć.
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
openssl x509
. cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
w 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 p
polecenie (print) stosuje się do linii między pierwszą linią, która zawiera, --BEGIN
a końcem pliku ( $
).
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.
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
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
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
openssl pkcs12 -w YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
na.crt
i.key
.