web-dev-qa-db-ja.com

PrivateKeyEntryとして証明書をインポートする

TomcatサーバーにSSLをインストールし、発行者からのこれらの指示に従います https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO16181 そしてそれは述べています:

Verify the following information:

The SSL certificate is imported into the alias with the "Entry Type" of 
PrivateKeyEntry or KeyEntry.  If not, please import the certificate into 
the Private Key alias.

証明書(Tomcat)をインポートするとき、次を使用しています。

keytool -import -trustcacerts -alias your_alias_name -keystore your_keystore_filename
-file your_certificate_filename

しかし、そうすると、trustCertEntryとしてインポートされます

Keystore type: JKS
Keystore provider: Sun

Your keystore contains 3 entries

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
Tomcat, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>

エイリアスTomcatをPrivateKeyEntryとしてインポートするにはどうすればよいですか?

14
bhttoan

-trustcacertsオプションを取り除きます。 CA証明書ではありません。 your証明書です。そして、秘密鍵がすでに持っていたのと同じエイリアスを使用します。

7
user207421

これらのCAガイドラインは少し誤解を招く恐れがあります。 @EJPは、証明書に-trustcacertsを使用すべきではないと正しく述べています。

さらに、このCAドキュメントでは、プライマリCA証明書と中間CA証明書を別々の操作でインポートすることを提案しています。これにより、次のような結果が得られます。

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
Tomcat, Jul 26, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1):  <snip>

残念ながら、このようにkeystoreにCA証明書をインポートしても意味がありません。 (これは truststore で役立ちますが、使用しているCAはおそらくデフォルトのトラストストアにすでに存在します。)

keystoreに証明書のCA証明書があると、中間証明書が必要なときに完全な証明書チェーンを提示するのに役立ちます。ただし、キーマネージャー(カスタム実装でない場合)は、エンドエンティティ証明書(PrivateKeyEntry内)の隣に適切なCA証明書を見つけたとしても、チェーンを構築しません。

これらの証明書togetherを、秘密鍵があるエントリに対してチェーンとしてインポートする必要があります。これを行うには、証明書をテキストファイル(PEMエンコード)で連結します。最初にサーバー証明書を発行し、次に発行に使用した証明書などを連結します。次に、その秘密鍵エイリアスを使用して、そのファイルをキーストアにインポートします。 (これは this question とまったく同じ問題ですが、サーバー証明書があります。)

(CAが証明書ファイルをチェーンとして既に提供しているかどうかはわかりませんが、一般的に、少なくとも1つのファイルでのみ証明書を取得し、別のファイルで中間CA証明書を取得します。 --BEGIN/END CERT--の間の複数のブロックについては言及しませんが、そのスクリーンショットの例では、その単一のエイリアスに対して証明書の長さが4になっています。

@jwwが質問のコメントで指摘したように、クライアントがすでに信頼している、または理由がないため、このチェーンに「ルート」CA証明書(自己署名証明書)は必要ありません。送信時に信頼してください。チェーンに含めることは間違っていませんが、無意味であり、ネットワークのオーバーヘッドが少し増える可能性があります。

4
Bruno

証明書を追加しようとし、それが秘密鍵になることを期待します-2つの異なるものの間の混乱。

一般に、キーストア(.jks)を作成すると、内部に秘密キーが含まれます。空の場合(削除された場合)、キーと証明書からバンドル(.p12ファイル)を生成する必要があります。

新しい無料のキーと証明書を作成するには、このopenSSl https://zerossl.com の実装を使用できます。

次に、それらから生成する(.p12)バンドルファイルのキーと証明書を取得しました:(Linuxマシン上)

openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [Host] -out [filename-new-PKCS-12.p12]

次のコマンドを実行して、バンドルファイル(.p12ファイル)をキーストア(.jks)に追加します。

keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12
4
Eitan Rimon