Converting a Java Keystore into PEM Format Ask Question

Converting a Java Keystore into PEM Format Ask Question

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

おすすめ記事