Konwersja pfx do pem przy użyciu openssl

109

Jak wygenerować .pem certyfikat CA i certyfikat klienta z pliku PFX przy użyciu OpenSSL.

Nowicjusz
źródło

Odpowiedzi:

107

Możesz użyć narzędzia wiersza poleceń OpenSSL. Poniższe polecenia powinny załatwić sprawę

openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts

openssl pkcs12 -in client_ssl.pfx -out root.pem -cacerts

Jeśli chcesz, aby Twój plik był chroniony hasłem itp., Istnieją dodatkowe opcje.

Możesz przeczytać całą dokumentację tutaj .

Sójka
źródło
191

Inną perspektywą zrobienia tego w Linuksie ... tutaj jest to, jak to zrobić, aby wynikowy pojedynczy plik zawierał odszyfrowany klucz prywatny, aby coś takiego jak HAProxy mogło go używać bez monitowania o hasło.

openssl pkcs12 -in file.pfx -out file.pem -nodes

Następnie możesz skonfigurować HAProxy do używania pliku file.pem.


To jest EDYCJA z poprzedniej wersji, w której miałem wiele kroków, dopóki nie zdałem sobie sprawy, że opcja -nodes po prostu omija szyfrowanie klucza prywatnego. Ale zostawiam to tutaj, ponieważ może to tylko pomóc w nauczaniu.

openssl pkcs12 -in file.pfx -out file.nokey.pem -nokeys
openssl pkcs12 -in file.pfx -out file.withkey.pem
openssl rsa -in file.withkey.pem -out file.key
cat file.nokey.pem file.key > file.combo.pem
  1. Pierwszy krok wymaga podania hasła do otwarcia PFX.
  2. Drugi krok prosi o to, a także o utworzenie hasła dla klucza.
  3. Trzeci krok wymaga wprowadzenia hasła, które właśnie utworzyłeś, aby przechowywać je w postaci odszyfrowanej.
  4. Czwarty łączy to wszystko w jeden plik.

Następnie możesz skonfigurować HAProxy do korzystania z pliku file.combo.pem.

Powodem, dla którego potrzebujesz 2 oddzielnych kroków, w których wskazujesz plik z kluczem, a drugi bez klucza, jest to, że jeśli masz plik, który ma zarówno zaszyfrowany, jak i odszyfrowany klucz, coś takiego jak HAProxy nadal monituje o wpisanie hasła, gdy używa go.

user2415376
źródło
Nie spędziłem czasu na dokładnym zaznajomieniu się z openssl, ale konwersja pem nie obejmowała klucza prywatnego. Edycja dostarczyła szczegółów, jak scalić certyfikat i klucz w jeden plik PEM, dokładnie to, czego potrzebowałem.
koniec
W systemach Windows użyj type zamiast cat
hupseb
W systemie Windows ta wersja OpenSSL jest łatwa w użyciu do takich rzeczy: slproweb.com/products/Win32OpenSSL.html
Helge Klein
Powyższe kroki działały dobrze, aby przekonwertować PFX na PEM. Musiałem jednak zrobić jeden dodatkowy krok: otworzyć plik nokey PEM w edytorze tekstu i przenieść ostatni certyfikat w łańcuchu na początek pliku. W przeciwnym razie nginx zgłosiłby błąd, narzekając na certyfikaty i odmówiłby ich użycia.
EugeneRomero
W takim przypadku możesz zmienić kolejność polecenia cat, aby umieścić je jako pierwsze. na przykład: cat file.key file.nokey.pem> file.combo.pem Chyba że sam plik.key zawiera wiele w złej kolejności. Ale w obu przypadkach prawdopodobnie możesz zmienić układ rzeczy programowo.
user2415376
11

Pomimo tego, że pozostałe odpowiedzi są poprawne i dokładnie wyjaśnione, miałem pewne trudności ze zrozumieniem ich. Oto metoda, której użyłem ( zaczerpnięto stąd ):

Pierwszy przypadek: aby przekonwertować plik PFX na plik PEM zawierający zarówno certyfikat, jak i klucz prywatny:

openssl pkcs12 -in filename.pfx -out cert.pem -nodes

Drugi przypadek: aby przekonwertować plik PFX na oddzielne pliki PEM klucza publicznego i prywatnego:

Wyodrębnia klucz prywatny z pliku PFX do pliku PEM:

openssl pkcs12 -in filename.pfx -nocerts -out key.pem

Eksportuje certyfikat (zawiera tylko klucz publiczny):

openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem

Usuwa hasło (parafrazę) z wyodrębnionego klucza prywatnego (opcjonalnie):

openssl rsa -in key.pem -out server.key
Mohammed Noureldin
źródło