webentwicklung-frage-antwort-db.com.de

java.lang.Exception: Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht überein

Ich muss auf einen Webservice zugreifen, der an Port 443 gehostet wird. Der Dienstanbieter hat drei Zertifikate für uns freigegeben.

  1. ABCD.cer
  2. CA_Certificate.cer
  3. CCA_Certificate.cer

Ich muss sie zu Keystore hinzufügen, indem Sie eine Formularkette für die SSL-Kommunikation erstellen. Ich habe die folgenden Schritte ausgeführt.

  1. keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore 

       Result :- keystore npci_keystore_test.jks created.
    
  2. keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot

       Result :- certificate CA_Certificate.cer is added to keystore.
    
  3. keytool -import -keystore npci_keystore_test.jks -file CCA_Certificate.cer -alias theCCARoot

       Result :- certificate CCA_Certificate.cer is added to keystore.
    
  4. keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias npci_client_testore

    Bei Schritt 4 habe ich eine Ausnahme

    Geben Sie das Keystore-Passwort ein: (und wenn ich das Passwort eingebe, habe ich eine Ausnahme)

    keytool-Fehler: Java.lang.Exception: Öffentliche Schlüssel in Antwort und Schlüsselspeicher stimmen nicht mit überein.

Ich habe schon in SO gesucht, aber bisher kein Glück.

Ich folge der Quelle, um das Geschäft zu erstellen und das Zertifikat darin zu importieren . JKS Keystore

EDIT: ---

Ich habe es getestet, indem ich die Importreihenfolge des Zertifikats geändert habe, aber bisher kein Glück.

10
RE350

Der Link in Ihrer Frage erläutert, wie Sie einen SSL-Keystore für einen Server erstellen. Dies ist nicht das, was Sie tun möchten. Was du getan hast, war:

  1. Erstellen Sie ein neues Schlüsselpaar
  2. Fügen Sie dem Schlüsselspeicher ein vertrauenswürdiges Zertifikat hinzu
  3. Fügen Sie dem Schlüsselspeicher ein weiteres vertrauenswürdiges Zertifikat hinzu
  4. Versuchen Sie, das SSL-Zertifikat des Servers als Zertifikat für Ihr Schlüsselpaar zu importieren

Schritt 4 schlägt fehl, da das SSL-Zertifikat für ein völlig anderes Schlüsselpaar generiert wurde.

Die drei Zertifikate sind wahrscheinlich: 

  1. Das SSL-Zertifikat des Webservice
  2. Das CA-Zertifikat, das das SSL-Zertifikat signiert hat
  3. Das Stammzertifikat, das die Zertifizierungsstelle signiert hat

Jetzt müssen Sie Ihrem Truststore einen Vertrauensanker hinzufügen (standardmäßig: ${Java_HOME}/jre/lib/security/cacerts), so dass Ihr Client das SSL-Zertifikat des Webservice akzeptiert. 

Normalerweise sendet der SSL-Server während des SSL-Handshakes die gesamte Kette mit Ausnahme des Stammzertifikats an den Client. Das bedeutet, dass Sie das Stammzertifikat Ihrem Truststore hinzufügen müssen:

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

Zusätzliche Schritte sind erforderlich, wenn für den Webservice eine SSL-Clientauthentifizierung erforderlich ist, die Clientauthentifizierung jedoch noch nicht erwähnt wurde. 

14
Omikron

Das Problem hier ist der Alias, den Sie beim Importieren des Zertifikats verwendet haben. Dieser ähnelt dem, den Sie beim Erstellen des JKS-Speichers verwendet haben. Ändern Sie einfach den Alias ​​und es wird Ihr Problem gelöst. Das Quelldokument [1] muss entsprechend korrigiert werden.

[1] http://docs.Oracle.com/cd/E19509-01/820-3503/ggfgo/index.html

26

In 4 Punkt (wo Sie Fehler erhalten: keytool Fehler: Java.lang.Exception: Öffentliche Schlüssel in Antwort und Keystore stimmen nicht mit ) überein, wo Sie das Zertifikat importieren. Der Alias ​​sollte nicht npci_client_testore lauten, da er bereits für den Alias ​​des Keystores verwendet wird.

4

In meinem Fall fehlte das "Das Root-Zertifikat, das die Zertifizierungsstelle signiert hat" in der Kette. Bitte überprüfen Sie, ob Sie das entsprechende ROOT CA-Zertifikat besitzen. Andernfalls exportieren Sie es aus dem Intermediate und importieren Sie es in den Schlüsselspeicher. Durch das Importieren der Stammzertifizierungsstelle in meinen Schlüsselspeicher arbeitete ich für mich.

3
azhar buttar

das hat für mich funktioniert

keytool -keystore yourkeystorename -importcert -alias certificatealiasname -file certificatename.cer

0
guest98

Ich hatte bei Tomcat8 den gleichen Ausnahmefehler (der Keystore stimmt nicht überein). Wenn Sie beim Erstellen Ihres Keystores einen wrong domain name oder no domain name eingegeben haben, müssen Sie Ihre Keystore-Datei erneut erstellen und Ihre CSR erneut an Ihre Zertifizierungsstelle (CA) senden, die für die Ausstellung von Signaturzertifikaten lizenziert/anerkannt/genehmigt ist Fall). 

Hier sind die Befehle zum Erstellen einer Keystore-Datei: 

keytool -keysize 2048 -genkey -alias Tomcat -keyalg RSA -keystore Tomcat.keystore
keytool -importkeystore -srckeystore Tomcat.keystore -destkeystore Tomcat.keystore -deststoretype pkcs12

(Sie müssen den Domänennamen eingeben, wenn in der Eingabeaufforderung ein Vor- und Nachname angezeigt wird, der Fully Qualified Domain Name (FDQN), z. B. www.example.com). Aus Stadt, Staat und Provinz - do not abbreviate

Geben Sie den folgenden Befehl ein, um die CSR zu erstellen (aus demselben Verzeichnis wie Ihr Tomcat.keystore-Speicherort): 

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

Hinweis: Aufgrund meines vorherigen Fehlers musste ich alle meine Godaddy-Zertifikate von meiner Windows-Konsole löschen ( MMC ). 

Sobald Ihre Zertifikatsdateien von Ihrer Zertifizierungsstelle bereit sind. Laden Sie die Dateien herunter, und doppelklicken Sie auf jede der beiden .crt-Dateien, um sie erneut in Windows zu installieren (Wählen Sie die Option zum automatischen Installieren im lokalen Computer aus). Stellen Sie sicher, dass Sie eine Sicherungskopie Ihrer Tomcat.keystore-Datei erstellen, und importieren Sie diese Zertifikatsdateien IN ORDER in Ihre Tomcat.keystore-Datei (von Grund auf) in derselben Reihenfolge wie im folgenden Beispiel:

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

Stellen Sie sicher, dass Sie Ihre server.xml aktualisiert haben, und starten Sie Ihren Tomcat neu 

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="443" />  
    <Connector 
    URIEncoding="UTF-8"
    SSLEnabled="true" 
    clientAuth="false"
    keystoreFile="C:\Program Files\Java\jdk1.8.0_181\bin\Tomcat.keystore" 
    keystorePass="changeme" 
    maxThreads="200" 
    port="443" 
    scheme="https" 
    secure="true" 
    sslProtocol="TLS" />

Voilà! Das gesperrte Symbol (Sichere Verbindung) wird beim Browsen in der Domäne angezeigt. 

0
QA Specialist