przekonwertować klucz .p7b na .pfx

10

Mam certyfikat SSL w formacie .p7b, który muszę przekonwertować na format .pfx. Jeśli spróbuję tego za pomocą zarządzania certyfikatami systemu Windows, opcja ekspert jako .pfx jest wyłączona.

Próbuję z openssl Znalazłem następujące dwa polecenia do konwersji:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

ale nie jestem pewien, jakiego klucza użyć do polecenia esecond ani do jakiego certyfikatu odnosi się CACert.cer.

Jak przekonwertować ten klucz na format .pfx?

DrStalker
źródło

Odpowiedzi:

20

PKCS # 7 nie obejmuje części prywatnej (kluczowej) pary certyfikat / klucz prywatny, jest powszechnie używany do rozpowszechniania certyfikatów (np. Jako odpowiedź na żądanie certyfikatu PKCS # 10, jako środek do dystrybucji certyfikatów S / MIME używane do szyfrowania wiadomości lub sprawdzania poprawności podpisanych wiadomości itp.). Należy pamiętać, że dotyczy to tylko certyfikatów, które z definicji są przedmiotami publicznymi.

PKCS # 12 to bardziej uniwersalny kontener - przeznaczony jest do przechowywania zarówno klucza prywatnego, jak i części certyfikatu publicznego, aby można je było przenosić. Może być chroniony hasłem, aby zapewnić pewną ochronę kluczy.

PFX był poprzednikiem PKCS # 12.

Nie można (jak wskazuje Anitak) konwertować z PKCS # 7 na PKCS # 12 bez dodatkowych danych (część klucza prywatnego), ponieważ PKCS # 7 nie zawiera wszystkich danych.

Mark Sutton wskazał, dlaczego nie można eksportować jako PFX - dany certyfikat ma oznaczony klucz prywatny jako nieeksportowalny. Dostawca usług kryptograficznych (CSP) nie zezwoli na przeniesienie tego klucza, jest to celowe. Jedynym * sposobem na uzyskanie eksportowanej pary certyfikatów \ kluczy jest uzyskanie oryginalnego certyfikatu z ustawioną flagą eksportu. Możliwe jest również, że z certyfikatem nie ma klucza prywatnego, ale zakładam, że tak nie jest.

Istnieje dobre podsumowanie różnych typów PKCS na Wikipedii .

  • Przynajmniej jedyny legalny sposób. W zależności od sprzętu CSP \ Crypto mogą istnieć mechanizmy, szczególnie w przypadku oprogramowania CSP tylko, ale jest to obszar, w którym mnie interesują badania podatności na zagrożenia, a nie administrator systemu.
Helvick
źródło
Dzięki - wygląda na to, że zakup nowego certyfikatu może być tańszy niż jego odzyskanie, w zależności od czasu, jaki będziemy musieli poradzić sobie z firmą zewnętrzną, aby to zrobić.
DrStalker,
12

Przechodzę przez to co 2 lata (kiedy odnawiam certyfikat podpisywania kodu) i za każdym razem jest to uciążliwe.

Kluczową informacją jest to, że możesz po prostu zmienić nazwę plików .p7b na .spc (jak podano tutaj: http://support.microsoft.com/kb/269395 ).

Następnie możesz użyć narzędzia pvk2pfx.exe, aby przekonwertować PVK + SPC na PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(być może możesz pominąć krok zmiany nazwy p7b i użyć go bezpośrednio; nie próbowałem ...)

John Hart
źródło
jest to o wiele bardziej przydatne niż zaakceptowana odpowiedź. Jestem zdumiony stanem nonsensów podpisywania kodu. Kulę się na myśl, że muszę powtarzać to w kółko po wygaśnięciu certyfikatów.
Tim
3

W przypadku narzędzia Windows, jeśli opcja pfx jest wyłączona, oznacza to, że klucza prywatnego nie można wyeksportować z lokalnego sklepu. Wynika to z faktu, że go nie ma (ponieważ klucze nie zostały wygenerowane w pudełku, którego używasz) lub dlatego, że gdy wygenerowałeś klucze, klucz prywatny nie był oznaczony jako eksportowalny, a szablon certyfikatu systemu Windows nie został skonfigurowany w celu umożliwienia eksportu.

Zakładam, że używasz urzędu certyfikacji Microsoft do wydawania swoich certyfikatów. Czy to jest poprawne?

Jeśli tak, to:

1.Upewnij się, że szablon certyfikatu umożliwia eksport kluczy prywatnych.
2.Jak generujesz żądanie certyfikatu, możesz użyć następującej techniki

UTWÓRZ plik INF w następujący sposób

[Wersja]
Podpis = "$ Windows NT $

[NewRequest]
Temat =" itp. "
KeySpec = 1 Eksportowalny
= 1
MachineKeySet = PRAWDA
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

UWAGA Eksportowalny = 1
Następnie użyj płynnych poleceń w wierszu polecenia

certreq -Nowy infile.inf reqfile.req // gdzie infile.inf jest plik powyżej reqfile jest plik żądania wyjścia

certreq -submit -config \ reqfile.req // przekazuje żądanie do cert CA

Po wykonaniu tych czynności będziesz być w stanie wyeksportować certyfikat jako plik pfx

Alternatywnie przejdź http://www.blacktipconsulting.com/Site/Products.html gdzie umieściłem moje bezpłatne narzędzie wiersza poleceń, które robi to wszystko za Ciebie i eksportuje certyfikat jako pfx po zakończeniu

Mark Sutton
źródło
2

Jak zauważył Helvick, odpowiedź PKCS10 to PKCS7 i nie zawiera klucza prywatnego. Tak więc podczas generowania CSR powinieneś był wygenerować plik privatekey.key. Możesz użyć następujących poleceń. (Wiem, że to pytanie ma cztery lata, ale nie mogłem tego zrobić podczas dyskusji na stronie).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Powodzenia!

Pozdrawiam, JE

java_enthu
źródło
Możesz nie potrzebować -informargumentu.
palswim
1

Mogę się mylić, ale myślę, że twój plik PCKCS # 7 zawiera tylko publiczną połowę twojego certyfikatu.

Plik PKCS # 12 musiałby mieć obie połówki - dlatego potrzebuje takiej -inkeyopcji.

Alnitak
źródło