Konwertuj z P7B na PEM przez OpenSSL

39

W systemie Ubuntu nie mogę pomyślnie przekonwertować certyfikatu za pomocą openssl.

vagrant@dev:/vagrant/keys$ openssl pkcs7 -print_certs -in a.p7b -out a.cer 
unable to load PKCS7 object <blah blah>:PEM
routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: PKCS7

Czy widziałeś wcześniej ten błąd?

Kevin Meredith
źródło
Czy jesteś pewien, że plik to p7b?
Zoredache,
Czy plik został przeniesiony między serwerami lub przesłany przez FTP? Jeśli rzeczywiście jest to prawidłowy format, wygląda na to, że mógł zostać uszkodzony. Spróbuj ponownie przenieść plik na serwer w trybie binarnym (jeśli używasz FTP) lub ponownie skopiuj go ze źródła.
Garrett,
Mówię, że jest to p7b oparty na sufiksie pliku. Ponownie pobrałem go przez Firefoksa, ale nadal mam ten sam błąd OpenSSL ...
Kevin Meredith,
1
@Kevin Co file a.p7bci daje?
Nic Young,
@NicYoung - Właśnie otrzymałem powyższy komunikat o błędzie. Brak danych wyjściowych.
Kevin Meredith,

Odpowiedzi:

55

Spróbuj tego:

$ openssl pkcs7 -inform der -in a.p7b -out a.cer

Jeśli to nie zadziała, przeniesie się na komputer z Windows i wyeksportuj postępuj zgodnie z tym przewodnikiem.

kwanty
źródło
8
Zauważ, że OP miał parametr -print_certsw swoim poleceniu. Wpływa na format wyjściowy: dzięki niemu otrzymujesz format PEM (zaczynając od ----- ROZPOCZNIJ CERTYFIKAT -----), a bez niego otrzymasz format PKCS # 7 (----- ROZPOCZNIJ PKCS7-- ---)
Sylvain
Działa to tylko wtedy, gdy upuszczę -inform derczęść. Należy również pamiętać, że podczas eksportowania klucza z Windows Cert Manager, DER i P7B są dwiema różnymi opcjami.
jpaugh
18

Aby połączyć powyższe odpowiedzi, polecenie brzmi:
openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Zweryfikowano, że działa w systemie Windows przy użyciu OpenSSL-Win64

/ Dzięki Bogdan za wykrycie błędu

Peet van de Sande
źródło
8

Postępowałem zgodnie z tym przewodnikiem, który instruuje cię do zmiany linii nagłówka / stopki

-----BEGIN PKCS #7 SIGNED DATA-----
[data]
-----END PKCS #7 SIGNED DATA-----

do

-----BEGIN CERTIFICATE-----
[data]
-----END CERTIFICATE-----

Następnie uruchom polecenie openssl pkcs7 -in foo.modified.crt -print_certs -out foo.certs(gdzie foo.modified.crtjest plik, w którym zapisałeś zmodyfikowaną wersję). To dało mi takie same wyniki jak uruchomienie eksportu certyfikatu Windows, jak sugerowano w innych odpowiedziach.

Curtis Gibby
źródło
5

O ile mi wiadomo, poniższe powinny przekonwertować certyfikat pkcs7 na pem

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem
Giuseppe Urso
źródło
Dlaczego masz na myśli, że ta odpowiedź jest związana z tym wątkiem? Ponieważ jak widzisz. To jest tak jak powyżej.
msavara
3

szybkie rozwiązanie w moim przypadku (wiele plików z brakującym nagłówkiem / stopką):

base64 -d $FILE | openssl pkcs7 -inform DER -print_certs

Cerber
źródło
1
Miałem certyfikat zakodowany w standardzie base64 i nic więcej o nim nie wiedziałem, a polecenie base64 -d zaoszczędziło mi wielu kłopotów. To rozwiązanie powinno być łatwiej dostępne w wynikach wyszukiwania. Dziękuję Ci!
2

Też miałem ten problem. Chciałem zweryfikować plik p7b, który skopiowałem z hosta Win7.

Dowiedziałem się, że brelok gnome może zaimportować certyfikat. Stamtąd można łatwo eksportować do DER

Joakim
źródło