UnrecoverableKeyException: Schlüssel kann nicht wiederhergestellt werden [duplizieren]

8

Ich habe eine Anwendung, bei der der serverseitige Code den Keystore lädt -

%Vor%

Das hat gut funktioniert, als ich nur einen privaten Schlüssel im Keystore hatte. Als ich einen weiteren privaten Schlüssel (mit einem anderen Passwort) zum Keystore hinzufügte, bekam ich diesen Fehler

%Vor%

Ich habe dann versucht, einen benutzerdefinierten Schlüsselmanager zu erstellen, wie im folgenden Link angegeben.

@Bruno Ich habe den Vorschlag, den du gegeben hast, ausprobiert. Das funktioniert jedoch nicht. Meine benutzerdefinierte Schlüsselmanagerfabrik sieht so aus -

%Vor%

}

Nachdem ich ein Objekt von CustomKeyManager erstellt habe, wenn ich einen Aufruf von getPrivateKey erhalte, bekomme ich einen privaten Schlüssel ungleich Null -

Sun RSA privater CRT-Schlüssel, 1024 Bit   Modul: 117260821110864021601500037071432398877761428124640545232618906306796101075244931231861318133902594657774603548686479580347869030216483422242066483203953111970007516384847036243243010603169399491545560497255823475630452314709747201644535089867367118834303975042348737995500693672037616900410158764770570813729   .......

Das sagt mir, dass mein getPrivateKey funktioniert.

Ich benutze den CustomKeyManager auf die folgende Art und Weise

%Vor%

Die Ausnahme, die ich bekomme, ist

javax.net.ssl.SSLHandshakeException: keine Cipher Suites allgemein

Gibt es einen Fehler bei der Erstellung und Verwendung des CustomKeyManagers? Die andere Sache von Interesse ist, dass, wenn ich Haltepunkte zu allen Methodeneintrittspunkten im CustomKeyManager setze, keiner von ihnen getroffen wird.

    
PAN 25.08.2014, 14:28
quelle

1 Antwort

9

Ihr UnrecoverableKeyException passiert, weil der Schlüsselverwalter nicht das korrekte Passwort verwendet. Wie Sie sagten, verwenden Ihre zwei privaten Schlüssel unterschiedliche Passwörter. Der Code, den Sie verlinken, wird hier nicht weiterhelfen, da er lediglich das Verhalten des vorhandenen Keymanagers umschließt, den Sie mit nur einem der beiden Passwörter initialisiert haben.

Wenn Sie wirklich zwei unterschiedliche Passwörter verwenden möchten, müssen Sie getPrivateKey(String alias) in Ihrem benutzerdefinierten X509KeyManager implementieren, um dies zu berücksichtigen. Insbesondere müssen die Schlüssel aus Ihrer KeyStore -Instanz mit dem richtigen Passwort für jeden Alias ​​geladen werden (siehe getKey(String alias, char[] password) ).

    
Bruno 25.08.2014, 14:42
quelle

Tags und Links