JavaキーストアをPEM形式に変換する
1. 序章
Java KeyStore は、Javaコードを作成するときに使用できるセキュリティ証明書のコンテナです。 Java KeyStoreは、一致する秘密鍵を持つ1つ以上の証明書を保持し、JDKに付属のkeytoolを使用して作成されます。
keytool はJDKで使用可能であり、OpenSSLWebサイトからopensslをダウンロードできます。
2. ファイル形式
Java KeyStoreは、JKSファイル形式で保存されます。 これは、Javaプログラムで使用するための独自の形式です。 PKCS#12 KeyStoreは非独占的であり、人気が高まっています— Java 9以降、PKCS#12はJKSのデフォルトのKeyStore形式として使用されます。
PEMファイルは証明書コンテナでもあります。Base64を使用してバイナリデータをエンコードします。これにより、コンテンツをさまざまなシステムでより簡単に送信できます。 PEMファイルには複数のインスタンスが含まれる場合があり、各インスタンスは次の2つのルールに準拠しています。
- の1行のヘッダー
-----BEGIN <label>-----
- の1行フッター
-----END <label>-----
3. JKS全体をPEM形式に変換する
次に、すべての証明書と秘密鍵をJKSからPEM形式に変換する手順を実行してみましょう。
3.1. Javaキーストアの作成
まず、単一のRSAキーペアを使用してJKSを作成します。
keytool -genkey -keyalg RSA -v -keystore keystore.jks -alias first-key-pair
プロンプトでKeyStoreパスワードを入力し、キーペアに関する情報を入力します。
この例では、2番目のキーペアも作成します。
keytool -genkey -keyalg RSA -v -keystore keystore.jks -alias second-key-pair
3.2. JKSからPKCS#12
変換プロセスの最初のステップは、 keytool を使用してJKSをPKCS#12に変換することです。
keytool -importkeystore -srckeystore keystore.jks \
-destkeystore keystore.p12 \
-srcstoretype jks \
-deststoretype pkcs12
ここでも、パスワードプロンプトに応答します。1つは元のJKSのパスワードを要求し、もう1つは結果のPKCS#12KeyStoreのパスワードを作成するように要求します。
そのコマンドを実行した結果を確認してみましょう。
Entry for alias first-key-pair successfully imported.
Entry for alias second-key-pair successfully imported.
Import command completed: 2 entries successfully imported, 0 entries failed or cancelled
結果は、PKCS#12形式で保存された keystore.p12KeyStoreです。
3.3. PKCS#12からPEM
ここから、 openssl を使用して、keystore.p12をPEMファイルにエンコードします。
openssl pkcs12 -in keystore.p12 -out keystore.pem
このツールは、各エイリアスのPKCS#12KeyStoreパスワードとPEMパスフレーズの入力を求めます。 PEMパスフレーズは、結果の秘密鍵を暗号化するために使用されます。
結果の秘密鍵を暗号化したくない場合は、代わりに次を使用する必要があります。
openssl pkcs12 -nodes -in keystore.p12 -out keystore.pem
keystore.pem には、KeyStoreからのすべてのキーと証明書が含まれます。 この例では、ファーストキーペアエイリアスとセカンドキーペアエイリアスの両方の秘密キーと証明書が含まれています。
4. 単一の証明書をJKSからPEMに変換する
keytoolのみを使用して、単一の公開鍵証明書をJKSからPEM形式にエクスポートできます:
keytool -exportcert -alias first-key-pair -keystore keystore.jks -rfc -file first-key-pair-cert.pem
プロンプトでJKSパスワードを入力すると、そのコマンドの出力が表示されます。
Certificate stored in file <first-key-pair-cert.pem>
5. 結論
keytool 、 openssl 、およびPKCS#12形式の中間段階を使用して、JKS全体をPEM形式に正常に変換しました。 また、keytoolのみを使用した単一の公開鍵証明書の変換についても説明しました。