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?


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

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

1
+1 za brak konieczności konwertowania pliku kluczy (mam go już w wystarczającej
— liczbie

22

Znalazłem tę 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

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.

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.


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).

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.