web-dev-qa-db-ja.com

自己署名証明書を使用してキーストアとトラストストアを作成するにはどうすればよいですか?

JavaサーバーとクライアントはSSLを使用してネットワーク経由で通信します。サーバーとクライアントは証明書を使用して相互に認証します。サーバーとクライアントが使用するキーストアタイプはJKSです。キーストアとトラストストアのファイル名は、サーバーとクライアントは、server.keystore、server.truststore、client.keystore、およびclient.truststoreです。

自己署名証明書をテストのみに使用しています。

質問:

Q1。手順6で、サーバーとクライアントの独自の証明書をそれぞれのトラストストアに追加する必要がある理由を知りたいのですが。

Q2。同じことを達成するためにステップ数を減らすことはできますか?はいの場合、どのように?

サーバーのRSAキー、自己署名証明書、キーストア、およびトラストストアを作成する手順

1。秘密RSAキーを生成します

openssl genrsa -out diagserverCA.key 2048

2。x509証明書を作成します

openssl req -x509 -new -nodes -key diagserverCA.key -sha256 -days 1024 -out diagserverCA.pem

。秘密鍵と公開証明書からPKCS12キーストアを作成します。

openssl pkcs12 -export -name server-cert -in diagserverCA.pem -inkey diagserverCA.key -out serverkeystore.p12

4。PKCS12キーストアをJKSキーストアに変換します

keytool -importkeystore -destkeystore server.keystore -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert

5。クライアントの証明書をサーバーのトラストストアにインポートします。

keytool -import -alias client-cert -file diagclientCA.pem -keystore server.truststore

6。サーバーの証明書をサーバーのトラストストアにインポートします。

keytool -import -alias server-cert -file diagserverCA.pem -keystore server.truststore

クライアントのRSA秘密鍵、自己署名証明書、キーストア、およびトラストストアを作成する手順

1。秘密鍵を生成します

openssl genrsa -out diagclientCA.key 2048

2。x509証明書を作成します

openssl req -x509 -new -nodes -key diagclientCA.key -sha256 -days 1024 -out diagclientCA.pem

。秘密鍵と公開証明書からPKCS12キーストアを作成します。

openssl pkcs12 -export -name client-cert -in diagclientCA.pem -inkey diagclientCA.key -out clientkeystore.p12

4。PKCS12キーストアをJKSキーストアに変換します

keytool -importkeystore -destkeystore client.keystore -srckeystore clientkeystore.p12 -srcstoretype pkcs12 -alias client-cert

5。サーバーの証明書をクライアントのトラストストアにインポートします。

keytool -import -alias server-cert -file diagserverCA.pem -keystore client.truststore

6。クライアントの証明書をクライアントのトラストストアにインポートします。

keytool -import -alias client-cert -file diagclientCA.pem -keystore client.truststore

6
vic99

Q1。手順6で、サーバーとクライアントの独自の証明書をそれぞれのトラストストアに追加する必要がある理由を知りたいのですが。

あなたはしません。サーバー証明書とクライアント証明書を互いのトラストストアに追加します。サーバーとクライアントは、自分の証明書を信頼する必要はありませんが、お互いの証明書を信頼する必要があります。

Q2。同じことを達成するためにステップ数を減らすことはできますか?はいの場合、どのように?

keytoolですべてを行うことができます。文書化された例がたくさん。 opensslを使用する必要はまったくありません。

批評:

  • 最初の部分では、ステップ5と6の両方が間違っています。 oneステップが必要です:サーバーの証明書をクライアントのトラストストアにエクスポートします。
  • 同様に、2番目の部分では、手順5と6が再び間違っており、クライアントの証明書をサーバーのキーストアにエクスポートするという手順のみが必要です。
  • つまり、2つのステップ5を交換し、2つのステップ6を削除する必要があります。

ロットを実行するための正しい手順は、JDKドキュメントの JSSEリファレンスガイド にあります。それぞれ約3ステップ。しかし、実際に示されているのは、自己署名証明書は実際に印刷された紙の価値がないということです。 CA署名付き証明書を取得します。はるかに多くの価値と展開がはるかに簡単です(エクスポート手順なし)。

このゴミはどこで手に入れたの?

4
user207421