Keytoolおよびopensslアプリケーションを使用して、JavaキーストアファイルからPEMファイルに変換しようとしています。しかし、変換を行う良い方法を見つけることができませんでした。何か案は?
キーストアを直接PEMに変換する代わりに、まずPKCS12ファイルを作成してから、関連するPEMファイルとキーストアに変換しようとしました。しかし、それらを使用して接続を確立できませんでした。 (セキュリティで保護された接続を実装するには、PEMファイルとキーストアファイルだけが必要です。「Javaキーストアファイルから開始」のような制限はありません。)場合)
ただし、jksからpemへの直接変換方法が望ましいです。
少なくともjdk6を使用すると、かなり簡単です...
bash $ keytool -keystore foo.jks -genkeypair -alias foo\ -dname 'CN = foo.example.com、L = Melbourne、ST = Victoria、C = AU' キーストアパスワードの入力: 新しいパスワードの再入力: のキーパスワードの入力(キーストアパスワードと同じ場合に戻る): bash $ keytool -keystore foo.jks -exportcert -alias foo |\ openssl x509 -inform der -text キーストアパスワードを入力:asdasd 証明書: データ: バージョン:3(0x2) シリアル番号:1237334757(0x49c03ae5) 署名アルゴリズム:dsaWithSHA1 発行者:C = AU、ST = Victoria、L = Melbourne、CN = foo.example.com 有効性 更新前:3月18日00:05:57 2009 GMT 更新後:6月16日00:05:57 2009 GMT 件名:C = AU、ST = Victoria、 L =メルボルン、CN = foo.example.com 件名公開鍵情報: 公開鍵アルゴリズム:dsaEncryption 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 宛先キーストアパスワードの入力: 新しいパスワードの再入力: ソースキーストアパスワードの入力: エイリアスfooのエントリが正常にインポートされました。 インポートコマンドが完了しました。1エントリが正常にインポートされ、0エントリが失敗またはキャンセルされました bash $ openssl pkcs12 -in foo.p12 -out foo.pem インポートパスワードを入力してください: MAC認証OK PEMパスフレーズを入力: 検証-PEMパスフレーズを入力: bash $ openssl x509 -text -in foo .pem 証明書: データ: バージョン:3(0x2) シリアル番号:1237334757(0x49c03ae5) 署名アルゴリズム:dsaWithSHA1 発行者:C = AU、ST = Victoria、L = Melbourne、CN = foo.example.com 有効期限 以前:3月18日00:05:57 2009 GMT 後:2009年6月16日00:05:57 GMT 件名:C = AU、ST =ビクトリア、L =メルボルン、CN = foo.example.com サブジェクト公開鍵情報: 公開鍵アルゴリズム:dsaEncryption 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 read DSA key PEMパスフレーズを入力: 秘密鍵:(1024ビット) 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:
次のようになります。
(この最後のファイルは、必要に応じてキーと証明書に分割できます。)
コマンドの概要-JKSキーストアを作成するには:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
コマンドの概要-JKSキーストアをPKCS#12キーストアに変換してから、PEMファイルに変換するには:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
jKSキーストアに複数の証明書があり、エイリアスの1つに関連付けられた証明書とキーのみをエクスポートする場合は、次のバリエーションを使用できます。
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
コマンドの概要-JKSキーストアと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
StoBorのコマンドを使用すると、openssl
からエラーが発生し続けました。
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:
何らかの理由で、このスタイルのコマンドのみがJKSファイルで機能します
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-srcalias mykey \
-deststoretype pkcs12 \
-destkeypass DUMMY123
キーはdestkeypass
を設定していましたが、引数の値は重要ではありませんでした。
keytool
コマンドでは、キーストアからプライベートキーをエクスポートできません。これを行うには、いくつかのJavaコードを記述する必要があります。キーストアを開き、必要なキーを取得し、PKCS#8形式のファイルに保存します。関連する証明書も保存します。
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();
OpenSSLユーティリティを使用して、これらのファイル(バイナリ形式)をPEM形式に変換します。
openssl pkcs8 -inform der -nocrypt < tmpkey.der > tmpkey.pem
openssl x509 -inform der < tmpcert.der > tmpcert.pem
Keytoolを使用したjksからpemファイルへの直接変換
keytool -exportcert -alias selfsigned -keypass password -keystore test-user.jks -rfc -file test-user.pem
JKSファイルをPEMおよびKEY形式(.crt&.key)に変換する簡単な手順:
keytool -importkeystore -srckeystore <Source-Java-Key-Store-File> -destkeystore <Destination-Pkcs12-File> -srcstoretype jks -deststoretype pkcs12 -destkeypass <Destination-Key-Password>
openssl pkcs12 -in <Destination-Pkcs12-File> -out <Destination-Pem-File>
openssl x509 -outform der -in <Destination-Pem-File> -out <Destination-Crt-File>
openssl rsa -in <Destination-Pem-File> -out <Destination-Key-File>
私は非常に興味深い解決策を見つけました:
http://www.swview.org/node/191
次に、公開キーと秘密キーのペアを2つのファイルprivate.key publi.pemに分割しました。
さて、 OpenSSLはそれを便利に行うべきです #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
たぶん、エラー/障害が何であるかについての詳細?
JKS KeyStoreを単一のPEMファイルに変換するには、次のコマンドを使用します。
keytool -list -rfc -keystore "myKeystore.jks" | sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d" >> "myKeystore.pem"
説明:
keytool -list -rfc -keystore "myKeystore.jks"
は、 'myKeyStore.jks' KeyStoreのすべてをPEM形式でリストします。ただし、追加情報も出力します。| sed -e "/-*BEGIN [A-Z]*-*/,/-*END [A-Z]-*/!d"
は不要なものをすべて除外します。キーストア内のすべてのPEMのみが残っています。>> "myKeystore.pem"
PEMをファイル「myKeyStore.pem」に書き込みます。Opensslをインストールしておらず、簡単な解決策を探している場合、 portcle と呼ばれるソフトウェアがあります。これは非常に便利で、ダウンロードするのが簡単です。
欠点は、私の知る限りコマンドラインがないことです。しかし、GUIから、PEM秘密鍵をエクスポートするのは非常に簡単です。
JavaキーストアをPEM形式に変換する
すべての最も正確な答えは、これが不可能であることです。
Javaキーストアは、暗号化キーの保管施設にすぎませんand証明書ですが、PEMはX.509証明書のみのファイル形式です。
最初にキーストアをJKSからPKCS12にダンプします
1. keytool -importkeystore -srckeystore〜/ .Android/debug.keystore -destkeystore Intermediate.p12 -srcstoretype JKS -deststoretype PKCS12
新しいpkcs12ファイルをpemにダンプします
証明書と秘密キーの両方をpem形式にする必要があります。それらを分割します。 「BEGIN CERTIFICATE」と「END CERTIFICATE」の間の部分をcert.x509.pemに入れます「BEGIN RSA PRIVATE KEY」と「END RSA PRIVATE KEY」の間の部分をprivate.rsa.pemに入れます秘密鍵をpk8形式に変換しますsignapkが期待
3. openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
最初にキーストアファイルを作成します
C:\ Program Files\Android\Android Studio\jre\bin>keytool -keystore androidkey.jks -genkeypair -alias androidkey
キーストアのパスワードを入力してください:
新しいパスワードを再入力してください:
姓名は何ですか?未知の: 名前苗字
組織単位の名前は何ですか?未知の: モバイル開発
組織の名前は何ですか?未知の: あなたの会社名
あなたの市または地域の名前は何ですか?州または県の名前は何ですか?
このユニットの2文字の国コードは何ですか?不明:IN // Enterを押します
これで確認を求められます
CN = FirstName LastName、OU = Mobile Development、O =あなたの会社名、L = CityName、ST = StateName、C = INは正しいですか? [番号]: はい
(キーストアのパスワードと同じ場合はRETURN)のキーパスワードを入力:同じパスワードが必要な場合はEnterキーを押します
キーが生成されたので、次のコマンドを使用して単純にpemファイルを取得できます
C:\ Program Files\Android\Android Studio\jre\bin>keytool -export -rfc -alias androidkey -file Android_certificate.pem -keystore androidkey.jks
キーストアのパスワードを入力してください:
ファイルに保存された証明書
Keystore Explorerをお試しください http://keystore-Explorer.org/
KeyStore Explorerは、Javaコマンドラインユーティリティkeytoolおよびjarsignerに代わるオープンソースGUIです。 openssl/pkcs12も同様です。