Jak wyeksportować łańcuch certyfikatów CA z PFX w formacie PEM bez atrybutów torby


31

Mam plik PKCS12 zawierający pełny łańcuch certyfikatów i klucz prywatny. Muszę podzielić go na 3 pliki dla aplikacji. Potrzebne mi są 3 pliki (w formacie PEM):

  • niezaszyfrowany plik klucza
  • plik certyfikatu klienta
  • plik certyfikatu CA (root i wszystkie pośrednie)

Jest to typowe zadanie, które muszę wykonać, dlatego szukam sposobu na zrobienie tego bez ręcznej edycji danych wyjściowych.

Próbowałem następujące:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

Działa to dobrze, jednak dane wyjściowe zawierają atrybuty torby, których aplikacja nie wie, jak sobie z tym poradzić.

Po kilku poszukiwaniach znalazłem sugerowane rozwiązanie przekazania wyników przez x509 w celu usunięcia atrybutów torby.

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

To działa, ale mam problem z plikiem cacert. Plik wyjściowy zawiera tylko jeden z 3 certyfikatów w łańcuchu.

Czy istnieje sposób na uniknięcie włączenia atrybutów bag do danych wyjściowych komendy pkcs12, czy sposób, aby dane wyjściowe komendy x509 obejmowały wszystkie certyfikaty? Dodatkowo, jeśli uruchomienie go przez x509 jest najprostszym rozwiązaniem, czy istnieje sposób na przesłanie danych wyjściowych z pkcs12 do x509 zamiast dwukrotnego zapisywania pliku?

Odpowiedzi:


36

Rozwiązaniem, do którego w końcu doszedłem, było przepuszczenie go przez sed.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

Dzięki! Zaoszczędziło mi to dzisiaj trochę czasu! ;-)
Jim P.

Dziękuję bardzo!
PaulJ
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.