Java で返信とキーストアの公開鍵が一致しないというエラーを解決する

Mehvish Ashiq 2023年6月20日
  1. Public Keys in Reply and Keystore Don't Match エラーのエラーの説明、原因、考えられる解決策
  2. Java での Public Keys in Reply and Keystore Don't Match エラーを解決する
Java で返信とキーストアの公開鍵が一致しないというエラーを解決する

今日のチュートリアルでは、keytool error: java.lang.Exception: Public keys in reply and keystore don't matchエラーについて説明します。 また、このエラーの原因として考えられる理由も強調しています。

さらに、このエラーを修正するために使用できるさまざまなソリューションについて学びます。

Public Keys in Reply and Keystore Don't Match エラーのエラーの説明、原因、考えられる解決策

ポート 443 でホストされている Web サービスにアクセスしようとします。サービス プロバイダーは、ABCD.cerCCA_Certificate.cer、および CA_Certificate.cer の 3つの証明書を共有しました。

SSL 通信用のフォーム チェーンを作成して、それらすべてを KeyStore に追加する必要があります。 この記事から従った手順を順番に以下に示します。

  • keytool -keystore npci_keystore.jks -genkey -alias npci_client
  • keytool -import -keystore npci_keystore.jks -file CA_Certificate.cer -alias CARoot
  • keytool -import -keystore npci_keystore.jks -file CCA_Certificate.cer -alias CCARoot
  • keytool -import -keystore npci_keystore.jks -file ABCD.cer -alias npci_client

この時点で、keytool error: java.lang.Exception: Public keys in reply and keystore don't matchというエラーが表示されました。 このエラーは何ですか? なぜこの問題が発生するのですか?

この問題は、以下に示すさまざまな理由で発生します。

  1. 別の鍵ペアで証明書を生成しようとすると、このエラーが発生します。
  2. このエラーは、証明書のインポート時と JKS ストアの作成時に同じエイリアスを使用した場合に発生します。
  3. 証明書を間違った順序でインストールすると、このエラーが発生する場合があります。
  4. ルート CA の証明書がチェーンにない場合も、この問題を解決します。

さて、ポイントはそれをどのように根絶するかです。 次のセクションでそれを見てみましょう。

Java での Public Keys in Reply and Keystore Don't Match エラーを解決する

このシナリオでは、使用していたリンクが、サーバー用の SSL キーストアを作成する方法を示していますが、これは私たちが達成したいことではありません。 私たちがしたことは、新しい鍵ペアの作成から始めました。

次に、信頼できる証明書を KeyStore に追加し、別の信頼できる証明書を KeyStore に追加してから、キー ペアのサーバーの SSL 証明書をインポートしようとしました。

この時点では、生成された SSL 証明書がまったく異なるキー ペア用であるため、失敗しています。 私たちが持っている3つの証明書には、次のものがあります。

  1. Web サービスの SSL 証明書
  2. SSL 証明書に署名した CA 証明書
  3. CA に署名したルート証明書

ここで、トラスト アンカーを TrustStore に追加する必要があります。 デフォルトでは、${JAVA_HOME}/jre/lib/security/cacerts であり、クライアントは Web サービスの SSL 証明書を受け入れます。

SSL ハンドシェーク中に、SSL サーバーはルート証明書を除くチェーン全体をクライアントに送信することに注意してください。 そのため、次のようにルート証明書をトラストストアに追加する必要があります。

keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias CCARoot

Web サービスで SSL クライアント認証が必要な場合は、いくつかの追加手順が不可欠です。 クライアント認証について言及したことがない場合、これは不要です。

これが私たちの場合のエラーの修正方法ですが、別の状況にある場合に試すことができる他の解決策があります。

  1. このエラーを解消するには、同じ実際のキー ペアを使用して証明書を再度生成する必要があります。
  2. JKS ストアの作成時と証明書のインポート時に同じエイリアスを使用すると、エラーが発生する場合があります。 次に、エイリアスを変更してエラーを解決する必要があります。
  3. ルート CA の証明書がチェーンから欠落していないことを確認します。
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - Java Error