Jak przekonwertować plik .pfx do magazynu kluczy z kluczem prywatnym?

107

Muszę podpisać aplikację na Androida ( .apk).
Mam .pfxplik. Przekonwertowałem go na .cerplik przez Internet Explorer, a następnie przekonwertowałem .cerna .keystorenarzędzie keytool. Potem próbowałem podpisać .apkz jarsigner, ale mówi, że .keystore nie zawiera klucza prywatnego.

Co robię źle?

Ola
źródło
Może to być przydatne: jak znaleźć i uruchomić keytool dla Windows stackoverflow.com/questions/5488339/ ...
Peter Barbanyaga

Odpowiedzi:

259

Korzystanie z JDK 1.6 lub nowszego

Justin wskazał w komentarzach poniżej, że samo narzędzie keytool jest w stanie to zrobić za pomocą następującego polecenia (chociaż tylko w JDK 1.6 i nowszych):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Korzystanie z JDK 1.5 lub starszego

OpenSSL może to wszystko. Ta odpowiedź na JGuru jest najlepszą metodą, jaką do tej pory znalazłem.

Najpierw upewnij się, że masz zainstalowany OpenSSL . Wiele systemów operacyjnych jest już zainstalowanych, tak jak znalazłem w systemie Mac OS X.

Poniższe dwa polecenia konwertują plik pfx do formatu, który można otworzyć jako magazyn kluczy Java PKCS12:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

PAMIĘTAJ, że nazwa podana w drugim poleceniu jest aliasem klucza w nowym magazynie kluczy.

Zawartość magazynu kluczy można zweryfikować za pomocą narzędzia Java keytool za pomocą następującego polecenia:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Wreszcie, jeśli potrzebujesz, możesz przekonwertować to na magazyn kluczy JKS, importując utworzony powyżej magazyn kluczy do nowego magazynu kluczy:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
MikeD
źródło
28
nie ma potrzeby wykonywania wszystkich trzech kroków, wystarczy uruchomić: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
JustinMorris
Myślę, że starsze wersje keytool nie pozwoliłyby ci tego zrobić. Pamiętam, że 8 lat temu musiałbym uruchamiać openssl, ale teraz z keytool w Oracle JDK 6 i 7 działa jak marzenie, tak jak powiedział Justin.
David Brossard
2
Proszę zauważyć, że podałem tę odpowiedź w prostszej formie, z bardziej szczegółowymi informacjami, rok przed Justinem.
gjpc
@gjpc Noted. Twoja odpowiedź jest bardzo kompletna i zasługuje na wiele
pozytywnych
To naprawdę świetna odpowiedź, która uratowała mnie po wielu dniach badań. Ta odpowiedź naprawdę zasługuje na dużo więcej głosów. Dziękuję Panu.
Mythul
22

jarsigner może użyć twojego pliku pfx jako magazynu kluczy do podpisywania twojego jar. Podczas eksportowania upewnij się, że plik pfx zawiera klucz prywatny i łańcuch certyfikatów. Nie ma potrzeby konwersji do innych formatów. Sztuczka polega na uzyskaniu aliasu pliku pfx:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Gdy masz już alias, podpisywanie jest łatwe

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

Powyższe dwa polecenia będą monitować o hasło określone podczas eksportu pfx. Jeśli chcesz, aby twoje hasło wisiało w postaci zwykłego tekstu, użyj przełącznika -storepass przed przełącznikiem -keystore

Po podpisaniu podziwiaj swoją pracę:

jarsigner.exe -verify -verbose -certs  yourjarfile
gjpc
źródło
1
+1 za brak konieczności konwertowania pliku kluczy (mam go już w wystarczającej
liczbie
22

Znalazłem stronę, która mówi, jak zaimportować PFX do JKS (Java Key Store):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME
kaptan
źródło
3
To powinna być pełna odpowiedź!
JustAGuy
Szukałem odpowiedzi takiej jak ta - z aliasem
user3437460
Mam jeden problem, pfx nie ma hasła, więc -srcstorepassjest mój problem. Ten PFX jest tworzony przez klienta LetsEncrypt dla systemu Windows
FiruzzZ
2

Twój plik PFX powinien zawierać klucz prywatny. Wyeksportuj klucz prywatny i certyfikat bezpośrednio z pliku PFX (np. Używając OpenSSL) i zaimportuj je do swojego magazynu kluczy Java.

Edytować

Dalsza informacja:

  • Pobierz OpenSSL dla Windows tutaj .
  • Eksportuj klucz prywatny: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Certyfikat eksportowy: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Zaimportuj klucz prywatny i certyfikat do magazynu kluczy Java za pomocą keytool.
Bernarda
źródło
czy możesz mi powiedzieć, jak mogę zaimportować key.pem i cert.pem za pomocą narzędzia keytool?
Sad Al Abdullah
1
Mały dodatek: musisz dodać -nodes na końcu podczas eksportowania prywatnego ky
morgan_il
2

Justin (powyżej) jest dokładny. Należy jednak pamiętać, że w zależności od tego, od kogo otrzymujesz certyfikat (pośredni ośrodek certyfikacji, główny urząd certyfikacji, czy nie) lub w jaki sposób tworzony / eksportowany jest plik pfx, czasami może brakować łańcucha certyfikatów. Po zaimportowaniu miałbyś certyfikat typu PrivateKeyEntry, ale z łańcuchem o długości 1.

Aby to naprawić, istnieje kilka opcji. Najłatwiejszą opcją w moim umyśle jest import i eksport pliku pfx w IE (wybierając opcję Uwzględnij wszystkie certyfikaty w łańcuchu). Proces importu i eksportu certyfikatów w IE powinien być bardzo łatwy i dobrze udokumentowany w innym miejscu.

Po wyeksportowaniu zaimportuj magazyn kluczy, jak wskazał powyżej Justin. Teraz miałbyś magazyn kluczy z certyfikatem typu PrivateKeyEntry i długością łańcucha certyfikatów większą niż 1.

W przypadku niektórych klientów usług WWW opartych na platformie .Net wystąpił błąd (nie można ustanowić relacji zaufania), jeśli nie wykonasz powyższego.

TechIsFun
źródło
Wydaje się, że to nie działa w IE11. Nie udało się uwzględnić łańcucha certyfikatów, mimo że to zalecam. Wiem, że to działało w przeszłości.
Brian Knoblauch
0

Jeśli pracujesz z JDK 1.5 lub starszym, narzędzie keytool nie będzie miało rozszerzenia -importkeystore opcji (zobacz dokumentację JDK 1.5 ), a rozwiązanie MikeD będzie dostępne tylko po przeniesieniu .pfxna maszynę z nowszym JDK (1.6 lub nowszym).

Inną opcją w JDK 1.5 lub starszym (jeśli posiadasz produkt Oracle WebLogic) jest postępowanie zgodnie z instrukcjami zawartymi w tym dokumencie Oracle: Używanie formatów certyfikatów PFX i PEM z magazynami kluczy . Opisuje konwersję do .pemformatu, jak wyodrębnić informacje o certyfikatach z tego formatu tekstowego i zaimportować je do .jksformatu za pomocą java utils.ImportPrivateKeynarzędzia (jest to narzędzie dołączone do produktu WebLogic).

Mariano Paniga
źródło