Jest to dość proste, używając przynajmniej jdk6 ...
bash $ keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN = foo.example.com, L = Melbourne, ST = Victoria, C = AU'
Wprowadź hasło do magazynu kluczy:
Wprowadź ponownie nowe hasło:
Wprowadź hasło klucza dla
(ZWRÓĆ, jeśli jest takie samo jak hasło do magazynu kluczy):
bash $ keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
Wprowadź hasło magazynu kluczy: asdasd
Certyfikat:
Dane:
Wersja: 3 (0x2)
Numer seryjny: 1237334757 (0x49c03ae5)
Algorytm podpisu: dsaWithSHA1
Wystawca: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Ważność
Nie wcześniej: 18 marca 00:05:57 2009 GMT
Nie po: 16 czerwca 00:05:57 2009 GMT
Temat: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Informacje o kluczu publicznym podmiotu:
Algorytm klucza publicznego: dsaEncryption
Klucz publiczny DSA:
pub:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
bash $ keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
Wprowadź hasło do docelowego magazynu kluczy:
Wprowadź ponownie nowe hasło:
Wprowadź hasło źródłowego magazynu kluczy:
Wpis dla aliasu foo został pomyślnie zaimportowany.
Polecenie importu zakończone: 1 wpisy pomyślnie zaimportowane, 0 wpisów nie powiodło się lub anulowano
bash $ openssl pkcs12 -in foo.p12 -out foo.pem
Wprowadź hasło importu:
MAC zweryfikowany OK
Wpisz hasło PEM:
Weryfikacja - wprowadź frazę hasła PEM:
bash $ openssl x509 -text -in foo.pem
Certyfikat:
Dane:
Wersja: 3 (0x2)
Numer seryjny: 1237334757 (0x49c03ae5)
Algorytm podpisu: dsaWithSHA1
Wystawca: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Ważność
Nie wcześniej: 18 marca 00:05:57 2009 GMT
Nie po: 16 czerwca 00:05:57 2009 GMT
Temat: C = AU, ST = Victoria, L = Melbourne, CN = foo.example.com
Informacje o kluczu publicznym podmiotu:
Algorytm klucza publicznego: dsaEncryption
Klucz publiczny DSA:
pub:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
bash $ openssl dsa -text -in foo.pem
przeczytaj klucz DSA
Wpisz hasło PEM:
Klucz prywatny: (1024-bitowy)
priv:
00: 8f: b1: af: 55: 63: 92: 7c: d2: 0f: e6: f3: a2: f5: ff:
1a: 7a: fe: 8c: 39: dd
pub:
00: e2: 66: 5c: e0: 2e: da: e0: 6b: a6: aa: 97: 64: 59: 14:
7e: a6: 2e: 5a: 45: f9: 2f: b5: 2d: f4: 34: 27: e6: 53: c7:
Kończysz z:
- foo.jks - magazyn kluczy w formacie java.
- foo.p12 - magazyn kluczy w formacie PKCS # 12.
- foo.pem - wszystkie klucze i certyfikaty z magazynu kluczy, w formacie PEM.
(Ten ostatni plik można podzielić na klucze i certyfikaty, jeśli chcesz).
Podsumowanie poleceń - aby utworzyć magazyn kluczy JKS:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
Podsumowanie polecenia - aby przekonwertować magazyn kluczy JKS do magazynu kluczy PKCS # 12, a następnie do pliku PEM:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
jeśli masz więcej niż jeden certyfikat w swoim magazynie kluczy JKS i chcesz wyeksportować tylko certyfikat i klucz powiązany z jednym z aliasów, możesz użyć następującej odmiany:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
Podsumowanie polecenia - aby porównać magazyn kluczy JKS z plikiem PEM:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem
Ciągle otrzymywałem błędy
openssl
podczas używania polecenia StoBor:MAC verified OK Error outputting keys and certificates 139940235364168:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:535: 139940235364168:error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error:p12_decr.c:97: 139940235364168:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:123:
Z jakiegoś powodu tylko ten styl poleceń będzie działał dla mojego pliku JKS
Klucz był ustawiony
destkeypass
, wartość argumentu nie miała znaczenia.źródło
keytool
Komenda nie będzie można wyeksportować klucza prywatnego z magazynu kluczy. Aby to zrobić, musisz napisać jakiś kod Java. Otwórz magazyn kluczy, weź potrzebny klucz i zapisz go w pliku w formacie PKCS # 8. Zapisz również powiązany certyfikat.KeyStore ks = KeyStore.getInstance("jks"); /* Load the key store. */ ... char[] password = ...; /* Save the private key. */ FileOutputStream kos = new FileOutputStream("tmpkey.der"); Key pvt = ks.getKey("your_alias", password); kos.write(pvt.getEncoded()); kos.flush(); kos.close(); /* Save the certificate. */ FileOutputStream cos = new FileOutputStream("tmpcert.der"); Certificate pub = ks.getCertificate("your_alias"); cos.write(pub.getEncoded()); cos.flush(); cos.close();
Użyj narzędzi OpenSSL, aby przekonwertować te pliki (które są w formacie binarnym) do formatu PEM.
źródło
Bezpośrednia konwersja z pliku jks do pliku pem za pomocą narzędzia keytool
źródło
keytool
ijboss
stron doc bez powodzenia. Dzięki!Uproszczone instrukcje konwersji pliku JKS do formatu PEM i KEY (.crt i .key):
źródło
Znalazłem bardzo ciekawe rozwiązanie:
http://www.swview.org/node/191
Następnie podzieliłem parę kluczy publiczny / prywatny na dwa pliki private.key publi.pem i działa!
źródło
Konwersję JKS KeyStore do pojedynczego pliku PEM można łatwo wykonać za pomocą następującego polecenia:
keytool -list -rfc -keystore "myKeystore.jks" | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d" >> "myKeystore.pem"
Wyjaśnienie:
keytool -list -rfc -keystore "myKeystore.jks"
wyświetla wszystko w magazynie kluczy „myKeyStore.jks” w formacie PEM. Jednak drukuje również dodatkowe informacje.| sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"
odfiltrowuje wszystko, czego nie potrzebujemy. Zostały nam tylko PEMy wszystkiego w KeyStore.>> "myKeystore.pem"
zapisz PEM do pliku „myKeyStore.pem”.źródło
sed "s/^\-*BEGIN [A-Z]*\-*$//g;s/^\-*END [A-Z]*\-*$//g"
(z gnu sed), ale nie jestem pewien, czy to wystarczy, jeśli w twoim magazynie kluczy jest więcej niż jeden certyfikatbash: !d": event not found
: w przypadku bash wykrzyknik jest krótkim klawiszem do użycia polecenia. Aby użyć tej odpowiedzi, musisz użyć apostrofów zamiast cudzysłowów dla opcji używanej jako -e dla sedkeytool -list -rfc -keystore "myKeystore.jks" | sed -e '/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d' >> "myKeystore.pem"
Najpierw zrzuć magazyn kluczy z JKS do PKCS12
1. keytool -importkeystore -srckeystore ~ / .android / debug.keystore -destkeystoremedi.p12 -srcstoretype JKS -deststoretype PKCS12
Zrzuć nowy plik pkcs12 do pem
Powinieneś mieć zarówno certyfikat, jak i klucz prywatny w formacie pem. Podziel je. Umieść część między „BEGIN CERTIFICATE” i „END CERTIFICATE” w cert.x509.pem Umieść część między „BEGIN RSA PRIVATE KEY” a „END RSA PRIVATE KEY” na private.rsa.pem Przekonwertuj klucz prywatny do formatu pk8 jako oczekiwany przez signapk
3. openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
źródło
Cóż, OpenSSL powinien zrobić to z łatwością z pliku # 12:
openssl pkcs12 -in pkcs-12-certificate-file -out pem-certificate-file openssl pkcs12 -in pkcs-12-certificate-and-key-file -out pem-certificate-and-key-file
Może więcej szczegółów na temat tego, na czym polega błąd / awaria?
źródło
Jeśli nie masz zainstalowanego openssl i szukasz szybkiego rozwiązania, istnieje oprogramowanie o nazwie portcle które jest bardzo przydatne i małe do pobrania.
Wadą jest to, że o ile wiem, nie ma wiersza poleceń. Ale z graficznego interfejsu użytkownika wyeksportowanie klucza prywatnego PEM jest całkiem proste:
Wybierz Klucz prywatny i certyfikaty oraz format PEM
źródło
Wypróbuj Keystore Explorer http://keystore-explorer.org/
KeyStore Explorer to interfejs GUI typu open source, zastępujący narzędzia wiersza poleceń języka Java, keytool i jarsigner. Robi również openssl / pkcs12.
źródło
najpierw utwórz plik kluczy jako
C: \ Program Files \ Android \ Android Studio \ jre \ bin> keytool -keystore androidkey.jks -genkeypair -alias androidkey
Wprowadź hasło do magazynu kluczy: Wprowadź
ponownie nowe hasło:
Jakie jest Twoje imię i nazwisko? Unknown: FirstName LastName
Jaka jest nazwa Twojej jednostki organizacyjnej? Nieznane: programowanie mobilne
Jaka jest nazwa Twojej organizacji? Nieznane: nazwa Twojej firmy
Jaka jest nazwa Twojego miasta lub miejscowości? Jaka jest nazwa twojego stanu lub prowincji?
Jaki jest dwuliterowy kod kraju dla tej jednostki? Nieznane: IN // naciśnij enter
Czy CN = FirstName LastName, OU = Mobile Development, O = nazwa Twojej firmy, L = CityName, ST = StateName, C = IN jest poprawne? [nie]: tak
Wprowadź hasło klucza dla (POWRÓT, jeśli jest takie samo jak hasło magazynu kluczy): naciśnij enter, jeśli chcesz to samo hasło
C: \ Program Files \ Android \ Android Studio \ jre \ bin> keytool -export -rfc -alias androidkey -file android_certificate.pem -keystore androidkey.jks
Wprowadź hasło magazynu kluczy:
Certyfikat przechowywany w pliku
źródło
Najdokładniejsza odpowiedź brzmi: NIE jest to możliwe.
Magazyn kluczy Java to jedynie miejsce przechowywania kluczy kryptograficznych i certyfikatów, podczas gdy PEM to format pliku tylko dla certyfikatów X.509.
źródło