web-dev-qa-db-ja.com

keytoolエラー:Java.lang.Exception:応答からチェーンを確立できませんでした

キーストアを生成します。

keytool -genkey -alias Tomcat -keyalg RSA -keystore my.keystore -keysize 2048

証明書署名要求(CSR)を生成します。

keytool -certreq -alias Tomcat -keyalg RSA -file my.csr -keystore my.keystore

その後、ホスティングプロバイダーにアクセスして、証明書を取得します。これらは次のようにインストールされます。

keytool -import -alias root -keystore my.keystore -trustcacerts -file Gd_bundle-g2-g1.crt
keytool -import -alias intermed -keystore my.keystore -trustcacerts -file gdig2.crt
keytool -import -alias Tomcat -keystore my.keystore -trustcacerts -file my.crt

最終証明書(my.crt)をインストールすると、次のエラーが表示されました。

keytool error: Java.lang.Exception: Failed to establish chain from reply

チェーンを正しい順序でインポートしたと思うので、このメッセージに非常に混乱しています。誰も私が間違っていることを見ることができますか?

26
Edd

私は、証明書で提供されたファイルgodaddyが両方とも中間証明書であることを発見しました(実際、両方とも同じ中間証明書のようです)。

証明書をダブルクリックして証明書のパスを見て、正しいルート証明書と中間証明書を取得しました...ここから、これらの各証明書をダウンロードして、質問で使用した手順を使用してインポートすることもできます

enter image description here

26
Edd

私はそれを回避する方法を見つけるまで約2週間同じ問題に苦しみました。問題は、Godaddyからの証明書に付属するルート証明書と中間証明書が必要な証明書ではないことでした。 Godaddyのリポジトリで、適切な証明書が見つからないことが何度もありました。

ラップトップで証明書を表示しました(Windows 8.1を使用)。そこで証明書チェーンを確認し、ルート証明書と中間証明書をエクスポートできました。次に、それらをキーストアにインポートしましたが、正常に機能しました。

これを行うには、次の指示に従ってください。

  1. Windowsを実行しているコンピューターで証明書を表示します。次の画像のように見える3番目のタブに証明書チェーンが表示されます。 enter image description here

  2. チェーンからルート証明書を選択し、[証明書の表示]ボタンをクリックします。

  3. 新しいウィンドウが開き、2番目のタブに移動して[ファイルの保存]ボタンをクリックします。これにより、証明書のエクスポートウィザードが開きます。
  4. エクスポートするときは、X.509 base 64オプションを選択し、指示に従います。ファイルを保存します。
  5. 中間証明書についても繰り返します。
  6. 両方の証明書をサーバーにアップロードし、最初のルート、2番目の中間、最後に証明書の順にキーストアにインポートします。 [ルート証明書をインポートする必要はありません]

注:これらの証明書をインポートする前に、キーストアにあり、動作していなかった証明書を削除する必要がありました。そのために、次の手順を使用しました。

keytool -delete -alias [root] -keystore [keystore file]

キーツールの内容がわからない場合は、次を使用して表示できます。

keytool -list -keystore [keystore file]

Linux環境で、CA認定証明書をキーストアにインポートしようとすると、同じエラーが発生しました。

一連の手順に従って、正常にインポートしました。

CA認定証明書を受け取ったら、次の手順を使用して証明書をキーストアにインポートします。

ステップ1:

次のコマンドを使用して、Java_HOME/jre/lib/securityフォルダーで使用できるcacertsにルート証明書をインポートします。

keytool -importcert -alias root -file [root certificate] -keystore cacerts

上記のコマンドを入力すると、パスワードの入力を求められ、パスワードを入力して、[はい]をクリックします。

ステップ2:

次のコマンドを使用してルート証明書をインポートします。

keytool -importcert -alias root -file [root certificate] -keystore [keystore file name]

上記のコマンドを入力すると、パスワードの入力を求められ、パスワードを入力して、[はい]をクリックします。

ステップ3:

次のコマンドを使用して中間証明書をインポートします。

keytool -importcert -alias intermediate -file [intermediate certificate] -keystore [key store file name]

上記のコマンドを入力すると、すでに証明書を置き換えるように求められ、yesと入力します。

注:中間証明書はオプションであり、無視できます。ルート証明書に付属しています。

ステップ4:

次のコマンドを使用してサイト証明書をインポートします。

keytool -trustcacerts -importcert -alias [alias name which give during keystore creation] -file [site certificate] -keystore [key store file name]

このコマンドを実行する環境はJavaバージョン7です。証明書はGODADDYによって発行されます。

詳細については、次のサイトを参照してください。 http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/keytool.html#importCertCmd

14
user2870979

この問題を解決するには、keytoolコマンドで追加のスイッチ(-trustcacerts)を使用します。

Intermediate.cerファイルからcertificate.ksキーストアファイルに中間証明書をインポートするコマンドは次のようになります。

keytool -storetype JCEKS -storepass passwd -keystore certificate.ks -import -alias Intermediate -trustcacerts -file Intermediate.cer

Http.cerファイルからcertificate.ksキーストアファイルに証明書をインポートするコマンドは次のようになります。

keytool -storetype JCEKS -storepass passwd -keystore certificate.ks -import -alias http -trustcacerts -file http.cer

署名されたSSL証明書の作成とインポートのプロセスを完了してください。

2
Viraj Nevase

証明書チェーンをダウンロードし、Windowsで開きます。CA証明書とCAからの証明書の回答を保存します。

最初にCA証明書をキーストアにインポートしてから、CAから回答をインポートします。

1
SpriteCZ

次の手順は、証明書をローカルキーストアにインポートする前に非常に重要です。 CAから署名済み証明書を受け取った後)。

次のコマンドを使用して、Java_HOME/jre/lib/securityフォルダーで使用できるcacertsにルート証明書をインポートします。

keytool -importcert -alias root -file [root certificate] -keystore cacerts上記のコマンドを入力すると、パスワードの入力を求められ、パスワードを入力して、[はい]をクリックします。

0
user3877963