Jak konwertować.plik pfx do keystore z kluczem prywatnym?

Muszę podpisać aplikację na Androida (.apk).
Mam plik .pfx. Przekonwertowałem go do pliku .cer przez Internet Explorer, a następnie przekonwertowałem .cer na .keystore za pomocą keytool. Więc próbowałem podpisać .apk z jarsignerem, ale tak jest napisane .keystore nie zawiera klucza prywatnego.

Co robię źle?
Author: Ola, 2010-11-18

6 answers

Korzystanie z JDK 1.6 lub nowszego

Justin zauważył w komentarzach, że keytool jest w stanie to zrobić używając następującego polecenia (chociaż tylko w JDK 1.6 i późniejszych):

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

Korzystanie z JDK 1.5 lub poniżej

OpenSSL potrafi 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 już go ma zainstalowane tak, jak znalazłem z Mac OS X.

Następujące 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"

Zauważ, że nazwa podana w drugim poleceniu jest aliasem Twojego klucza w nowym magazynie kluczy.

Możesz zweryfikować zawartość magazynu kluczy 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 do magazynu kluczy JKS, importując magazyn kluczy utworzone powyżej do nowego magazynu kluczy:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
 216
Author: MikeD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 09:52:48

Jarsigner może użyć pliku pfx jako klucza do podpisywania jar. Upewnij się, że Twój plik pfx zawiera klucz prywatny i łańcuch cert podczas eksportowania. Nie ma potrzeby konwersji do innych formatów. Sztuczka polega na tym, aby uzyskać Alias Twojego pliku pfx:

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

Gdy już masz swój alias, podpisywanie jest łatwe

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

Powyższe dwa polecenia zapytają Cię o hasło określone w pfx export. Jeśli chcesz, aby Twoje hasło wisiało czystym tekstem, użyj - storepass switch before the -keystore switch

Po podpisaniu podziwiaj swoją pracę:

jarsigner.exe -verify -verbose -certs  yourjarfile
 21
Author: gjpc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-04 17:00:36

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
 15
Author: kaptan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-23 01:22:00

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 klucza Java.

Edit

Dalsze informacje:

  • Pobierz OpenSSL Dla Windows tutaj .
  • eksport klucza prywatnego: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • świadectwo wywozowe: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Importuj klucz prywatny i certyfikat do magazynu Keystore Java za pomocą keytool.
 2
Author: Bernard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 20:05:42

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

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

Po wyeksportowaniu, zaimportuj keystore zgodnie z wskazaniem Justina powyżej. Teraz będziesz miał keystore z certyfikatem typu PrivateKeyEntry i łańcuchem certyfikatów o długości większej niż 1.

Błąd niektórych klientów usług internetowych opartych na. Net (nie można nawiązać relacji zaufania), jeśli nie wykonasz powyższego.

 2
Author: TechIsFun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 23:14:33

Jeśli pracujesz z JDK 1.5 lub poniżej, narzędzie keytool nie będzie miało opcji -importkeystore (zobacz JDK 1.5 dokumentacja keytool), a rozwiązanie MikeD będzie dostępne tylko przez przeniesienie .pfx na komputer z nowszym JDK (1.6 lub nowszym).

Inną opcją w JDK 1.5 lub poniżej (jeśli masz produkt Oracle WebLogic), jest wykonanie instrukcji z tego dokumentu Oracle: przy użyciu formatów certyfikatów PFX i pem z kluczami . Opisuje konwersję na Format .pem, Jak wyodrębnić informacje o certyfikatach z tego formatu tekstowego i zaimportować je do formatu .jks za pomocą narzędzia java utils.ImportPrivateKey (jest to narzędzie dołączone do produktu WebLogic).

 0
Author: Mariano Paniga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-13 13:16:58