web-dev-qa-db-ja.com

Java KeyStoreに秘密鍵/公開証明書のペアをインポートする

次の手順を使用して、TLSでJava(内部)サーバーが使用する秘密/公開キーのペアを持つ新しいJavaキーストアを作成しました。証明書は自己署名されていることに注意してください。

1)AES256でキーを生成します

openssl genrsa -aes256 -out server.key 1024

2)CAの証明書要求を生成する

openssl req -x509 -sha256 -new -key server.key -out server.csr

3)自己署名された有効期限10年を生成する

openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt

4) KeyStoreExplorer などのプログラムを使用して、新しいJKSにペア(秘密鍵と自己署名証明書)をインポートします

これは機能しますが、GUIを使用せずに最後のステップを実装したいと思います。

私は自己署名証明書のみをインポートする方法を知っています:

// create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN'T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION
/usr/Java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks

質問は次のとおりです。GUIを使用せずにJava KeyStoreを作成し、公開鍵と秘密鍵の両方の証明書をインポートするにはどうすればよいですか?

72
kingston

秘密鍵と公開証明書を使用して、最初にPKCS12キーストアを作成してから、それをJKSに変換する必要があります。

# Create PKCS12 keystore from private key and public certificate.
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12

# Convert PKCS12 keystore into a JKS keystore
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert

JKSの内容を確認するには、次のコマンドを使用できます。

keytool -list -v -keystore mykeystore.jks

これが自己署名証明書ではない場合、おそらくこの手順に従って、信頼できるCA証明書に至るまでの証明書チェーンをインポートすることをお勧めします。

169
gtrig

キーストアにはキーストアファイルが必要です。 KeyStoreクラスにはFileInputStreamが必要です。ただし、(FileInputStreamインスタンスの代わりに)nullを指定すると、 空のキーストアがロードされます 。キーストアを作成したら、keytoolを使用してその整合性を検証できます。

次のコードは、空のパスワードで空のキーストアを作成します

  KeyStore ks2 = KeyStore.getInstance("jks");
  ks2.load(null,"".toCharArray());
  FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore");
  ks2.store(out, "".toCharArray());

キーストアを取得したら、証明書のインポートは非​​常に簡単です。チェックアウト このリンク サンプルコード用。

0
Santosh