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.
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.
(być może możesz pominąć krok zmiany nazwy p7b i użyć go bezpośrednio; nie próbowałem ...)
źródło
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
źródło
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).
Powodzenia!
Pozdrawiam, JE
źródło
-inform
argumentu.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
-inkey
opcji.źródło