Lösen Sie die öffentlichen Schlüssel in Reply und Keystore Don't Match Error in Java auf
-
Fehlerbeschreibung, Ursachen und mögliche Lösungen für den Fehler
Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht überein
. -
Beheben Sie den Fehler
Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht überein
in Java
Das heutige Tutorial behandelt den Fehler keytool error: java.lang.Exception: Public keys in reply and keystore don't match
. Es hebt auch die möglichen Gründe hervor, die zu diesem Fehler führen.
Außerdem lernen wir die verschiedenen Lösungen kennen, mit denen wir diesen Fehler beheben können.
Fehlerbeschreibung, Ursachen und mögliche Lösungen für den Fehler Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht überein
.
Wir werden versuchen, auf den unter Port 443 gehosteten Webdienst zuzugreifen. Der Dienstanbieter hat drei Zertifikate freigegeben: ABCD.cer
, CCA_Certificate.cer
und CA_Certificate.cer
.
Wir müssen sie alle zum KeyStore hinzufügen, indem wir eine Formularkette für die SSL-Kommunikation erstellen. Die Schritte, die wir in diesem Artikel befolgt haben, sind unten in sequentieller Reihenfolge aufgeführt.
-
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
An diesem Punkt haben wir die Fehlermeldung keytool error: java.lang.Exception: Public keys in reply and keystore don't match
erhalten. Was hat es mit diesem Fehler auf sich? Warum haben wir dieses Problem?
Wir bekommen dieses Problem aus verschiedenen Gründen, die unten aufgeführt sind:
- Wir erhalten diesen Fehler, wenn wir versuchen, ein Zertifikat mit einem anderen Schlüsselpaar zu generieren.
- Dieser Fehler tritt auf, wenn wir beim Importieren eines Zertifikats und beim Erstellen des JKS-Speichers denselben Alias verwendet haben.
- Manchmal führt auch die Installation von Zertifikaten in der falschen Reihenfolge zu diesem Fehler.
- Wir gehen dieses Problem auch durch, wenn das Zertifikat der Root-CA in der Kette fehlt.
Jetzt geht es darum, wie man es ausrottet. Sehen wir uns das im folgenden Abschnitt an.
Beheben Sie den Fehler Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht überein
in Java
In unserem Szenario leitet der von uns verwendete Link an, wie wir einen SSL-Schlüsselspeicher für den Server erstellen können, was nicht das ist, was wir erreichen möchten. Wir haben mit der Erstellung eines neuen Schlüsselpaars begonnen.
Als Nächstes haben wir KeyStore ein vertrauenswürdiges Zertifikat hinzugefügt, KeyStore ein weiteres vertrauenswürdiges Zertifikat hinzugefügt und dann versucht, das SSL-Zertifikat des Servers für unser Schlüsselpaar zu importieren.
An diesem Punkt scheitern wir, weil das generierte SSL-Zertifikat für ein völlig anderes Schlüsselpaar gilt. Die drei Zertifikate, die wir haben, umfassen die folgenden:
- Das SSL-Zertifikat des Webdienstes
- Ein CA-Zertifikat, das ein SSL-Zertifikat signiert hat
- Ein Stammzertifikat, das eine Zertifizierungsstelle signiert hat
Jetzt müssen wir den Vertrauensanker zu unserem TrustStore hinzufügen. Standardmäßig ist es ${JAVA_HOME}/jre/lib/security/cacerts
, was zur Folge hat, dass unser Client das SSL-Zertifikat eines Webservices akzeptiert.
Denken Sie daran, dass der SSL-Server während des SSL-Handshakes eine ganze Kette mit Ausnahme des Stammzertifikats an einen Client sendet. Daher müssen wir unserem Truststore wie folgt ein Stammzertifikat hinzufügen.
keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias CCARoot
Einige zusätzliche Schritte sind unerlässlich, wenn ein Webdienst eine SSL-Client-Authentifizierung benötigt. Wenn wir die Client-Authentifizierung noch nie erwähnt haben, ist dies unnötig.
So wird der Fehler in unserem Fall behoben, aber es gibt andere Lösungen, die wir ausprobieren können, wenn wir uns in einer anderen Situation befinden.
- Wir müssen das Zertifikat mit demselben tatsächlichen Schlüsselpaar erneut generieren, um diesen Fehler zu beheben.
- Es gibt Situationen, in denen der Fehler durch die Verwendung desselben Alias beim Erstellen des JKS-Speichers und beim Importieren des Zertifikats verursacht wird. Dann müssen wir den Alias ändern, um den Fehler zu beheben.
- Stellen Sie sicher, dass das Zertifikat der Root-CA nicht in der Kette fehlt.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse