Muszę podpisać aplikację na Androida ( .apk
).
Mam .pfx
plik. Przekonwertowałem go na .cer
plik przez Internet Explorer, a następnie przekonwertowałem .cer
na .keystore
narzędzie keytool. Potem próbowałem podpisać .apk
z jarsigner, ale mówi, że .keystore nie zawiera klucza prywatnego.
Co robię źle?
Odpowiedzi:
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):
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:
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:
Wreszcie, jeśli potrzebujesz, możesz przekonwertować to na magazyn kluczy JKS, importując utworzony powyżej magazyn kluczy do nowego magazynu kluczy:
źródło
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:
Gdy masz już alias, podpisywanie jest łatwe
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ę:
źródło
Znalazłem tę stronę, która mówi, jak zaimportować PFX do JKS (Java Key Store):
źródło
-srcstorepass
jest mój problem. Ten PFX jest tworzony przez klienta LetsEncrypt dla systemu WindowsTwó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:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
keytool
.źródło
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.
źródło
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.pfx
na 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
.pem
formatu, jak wyodrębnić informacje o certyfikatach z tego formatu tekstowego i zaimportować je do.jks
formatu za pomocąjava utils.ImportPrivateKey
narzędzia (jest to narzędzie dołączone do produktu WebLogic).źródło