web-dev-qa-db-ja.com

PEM証明書チェーンとキーのインポートJava Keystore

このトピックに関するリソースはたくさんありますが、この少し特殊なケースをカバーするリソースは見つかりませんでした。

4つのファイルがあります。

  • privatekey.pem
  • certificate.pem
  • medium_rapidssl.pem
  • ca_geotrust_global.pem

そして、それらを新しいキーストアにインポートしたいと思います。

一部のサイトでは、DER形式を使用して1つずつインポートすることを推奨していますが、キーが認識されないため、失敗しました。

別のサイトは、インポートのために実行する特別な「ImportKey」クラスを提案しました。これは、チェーンが壊れているのを見るまで機能しました。つまり証明書のチェーンの長さは1で、中間とcaは無視されます。

一部のサイトではPKCS7を推奨していますが、そこからチェーンを取得することもできません。他の人はPKCS12形式を提案していますが、私のテストでは、チェーン全体を取得することもできませんでした。

アドバイスやヒントは大歓迎です。

29
Trollbane

これは完璧ではないかもしれませんが、私はkeytoolの使用について、シナリオに合わせて変更したいくつかの注意事項を持ちました。

  1. ルートまたは中間CA証明書を既存のJavaキーストアにインポートします:

    keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks
    keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks 
    
  2. インポートする前に、証明書と秘密鍵を1つのファイルに結合します。

    cat certificate.pem privatekey.pem > combined.pem
    

    これにより、次のようなファイルが生成されます。

    証明書を開始
    ...
    証明書を終了
    RSAプライベートキーの開始
    ...
    RSAプライベートキーの終了

  3. 署名済みのプライマリ証明書とキーを既存のJavaキーストアにインポートします:

    keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
    
27
Aaron Copley

All.pemのように、すべての* .pemファイルを1つのpemファイルに連結します。次に、秘密鍵+ all.pemを使用して、p12形式でキーストアを作成します。

openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12

次に、p12をjksにエクスポートします

keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks
47
senanqerib

keytoolは、上記で提案したように、単一の(結合された)ファイルから証明書と秘密鍵をインポートする方法を提供していません。正常に動作しますが、証明書のみがインポートされ、秘密鍵は無視されます。 keytool -list -v -keystore yourkeystore.jksで確認できます。ドメインエントリのタイプは、PrivateKeyEntryではなくTrustedCertEntryです。

したがって、最初の問題を解決するには、まずopenssl(または同様のツール)を使用してPKCS#12キーストアを作成し、次にkeytool -importkeystoreを使用してキーストアをインポートする必要があります。

9
Ixmal