1. ホーム
  2. java

[解決済み] Java Keystore を PEM 形式に変換する

2022-05-09 13:58:58

質問

私はkeytoolとopensslアプリケーションを使用して、JavaキーストアファイルからPEMファイルに変換しようとしています。しかし、私は変換を行うための良い方法を見つけることができませんでした。何かアイデアはありますか?

キーストアを直接PEMに変換する代わりに、私は最初にPKCS12ファイルを作成し、関連するPEMファイルとキーストアに変換しようとしました。しかし、私はそれらを使用して接続を確立することができませんでした。(PEMファイルとKeystoreファイルがあれば、セキュアな接続が可能です。Start from a java keystore file"のような制限はありません)。そのため、他のフォーマットから開始することは、私の場合、許容範囲内です)

しかし、jksからpemへの直接変換方式が望ましい。

どのように解決するのですか?

少なくともjdk6を使用すれば、かなり簡単です...。

bash$ keytool -keystore foo.jks -genkeypair -alias foo \.
        -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'。
keystoreのパスワードを入力します。 
新しいパスワードを再入力してください。
の鍵パスワードを入力します。
        (鍵屋のパスワードと同じならRETURN):  
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 グリニッジ標準時
            以降 : 2009年6月16日 00:05:57 GMT
        件名 C=AU、ST=Victoria、L=Melbourne、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パスフレーズを入力します。
Verifying - 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 グリニッジ標準時
            以降 : 2009年6月16日 00:05:57 GMT
        件名 C=AU、ST=Victoria、L=Melbourne、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ビット)
priv:
    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 - keystore のすべてのキーと証明書、PEM 形式。

(この最後のファイルは、お好みで鍵と証明書に分割することができます)。


コマンドの概要 - JKS keystore を作成します。

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 keystore と 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