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?


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.


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


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.


5

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

openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem

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


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

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.