I am trying to convert from a Java keystore file into a PEM file using keytool
and openssl
applications. However, I could not find an ideal way to do the conversion. Any thoughts?
Instead of converting the keystore directly into PEM
, I tried to create a PKCS12
file first and then convert it into a relevant PEM file and Keystore. However, I could not establish a connection using them.
(Note that I need a PEM file and a Keystore file to implement a secured connection. There is no restriction like "Start from a java keystore file". So starting from other formats is acceptable in my case)
But a direct conversion method from jks
to pem
is preferable.
ベストアンサー1
It's pretty straightforward, using jdk6 at least...
bash$ keytool -keystore foo.jks -genkeypair -alias foo \ -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU' Enter keystore password: Re-enter new password: Enter key password for (RETURN if same as keystore password): bash$ keytool -keystore foo.jks -exportcert -alias foo | \ openssl x509 -inform der -text Enter keystore password: asdasd Certificate: Data: Version: 3 (0x2) Serial Number: 1237334757 (0x49c03ae5) Signature Algorithm: dsaWithSHA1 Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com Validity Not Before: Mar 18 00:05:57 2009 GMT それ以降: 2009 年 6 月 16 日 00:05:57 GMT 件名: C=AU、ST=ビクトリア、L=メルボルン、CN=foo.example.com サブジェクト公開鍵情報: 公開鍵アルゴリズム: dsaEncryption DSA公開鍵: パブ: 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=ビクトリア、L=メルボルン、CN=foo.example.com 有効 以前: 2009 年 3 月 18 日 00:05:57 GMT それ以降: 2009 年 6 月 16 日 00:05:57 GMT 件名: C=AU、ST=ビクトリア、L=メルボルン、CN=foo.example.com サブジェクト公開鍵情報: 公開鍵アルゴリズム: dsaEncryption DSA公開鍵: パブ: 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 DSAキーの読み取り PEM パスフレーズを入力してください: 秘密鍵: (1024 ビット) 特権: 00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff: 1a:7a:fe:8c:39:dd パブ: 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:
最終的には次のようになります:
- foo.jks - Java 形式のキーストア。
- foo.p12 - PKCS#12 形式のキーストア。
- foo.pem - キーストアからのすべてのキーと証明書 (PEM 形式)。
(この最後のファイルは、必要に応じてキーと証明書に分割できます。)
コマンドの概要 - 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