Ich versuche, eine Instanz von org.apache.ws.security.components.crypto.Merlin
mit org.apache.ws.security.components.crypto.CryptoFactory
speziell die CryptoFactory.getInstance(properties)
Methode zu bekommen.Fehler bei der Instanziierung eines JavaKeyStore aus Datei
Dies wird
java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
consistantly werfen die evantually von
java.security.UnrecoverableKeyException: Password verification failed
Das Passwort auf der Schlüsselspeicherdatei mit dem keytool auf der Kommandozeile überprüft wurde und korrekt verursacht wird, .
wird die Schlüsselspeicher über das folgende Verfahren erzeugt:
, die in dem Root-Verzeichnis der Eklipse porject ist.
Der Test applciation ist wie folgt:
public class App {
public static void main(String[] args) throws CredentialException,
IOException {
System.out.println("Starting");
Properties p = new Properties();
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.password",
"password");
p.setProperty("org.apache.ws.security.crypto.provider",
"org.apache.ws.security.components.crypto.Merlin");
p.setProperty("org.apache.ws.security.crypto.merlin.keystore.type",
"jks");
p.setProperty("org.apache.ws.security.crypto.merlin.file", "./testkeystore.jks");
Crypto crypto = CryptoFactory.getInstance(p);
System.out.println(" Complete ");
}
}
und die folgende Ausnahme erzeugt wird:
Exception in thread "main" java.lang.RuntimeException: org.apache.ws.security.components.crypto.Merlin cannot create instance
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:225)
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:180)
at org.apache.ws.security.components.crypto.CryptoFactory.getInstance(CryptoFactory.java:73)
at com.restart.test.cryptotest2.App.main(App.java:22)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.apache.ws.security.components.crypto.CryptoFactory.loadClass(CryptoFactory.java:211)
... 3 more
Caused by: org.apache.ws.security.components.crypto.CredentialException: Failed to load credentials.
at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:174)
at org.apache.ws.security.components.crypto.AbstractCrypto.<init>(AbstractCrypto.java:135)
at org.apache.ws.security.components.crypto.Merlin.<init>(Merlin.java:71)
... 8 more
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
at java.security.KeyStore.load(KeyStore.java:1214)
at org.apache.ws.security.components.crypto.AbstractCrypto.load(AbstractCrypto.java:168)
... 10 more
Caused by: java.security.UnrecoverableKeyException: Password verification failed
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770)
... 13 more
Das Passwort wie im cmd Fenster angezeigt wird auf „Passwort“, sondern auch von allen Konten, die die Anwendung ablehnt, kann ich das Passwort unter Verwendung keytool -storepasswd
ohne Probleme ändern, So weiß ich, dass das Passwort, das ich zur Verfügung stelle, korrekt ist; kann jemand vorschlagen, was hier schief gehen könnte? Ich habe versucht, dies jetzt für einen ganzen Tag erfolglos zu debuggen.
Wenn es weitere Informationen gibt, die ich Ihnen zur Verfügung stellen kann, lassen Sie es mich bitte wissen.
bearbeiten -
die folloing Maven Abhängigkeit ist erforderlich, um diese Prüfung zu bauen:
<dependency>
<groupId>org.apache.ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>1.5.8</version>
<scope>provided</scope>
</dependency>
Wiederholen Sie einfach Ihre Schritte mit Oracle JDK 1.6 und es funktioniert ohne Fehler. Vielleicht ist Ihr Passwort falsch oder Sie versuchen, einen anderen Schlüsselspeicher zu öffnen? Versuchen Sie, es neu zu erstellen, und legen Sie absoluten Pfad zu Keystore fest. – user1516873
Hallo Benutzer, nach dem Lesen Ihrer Kommentare habe ich es gegen eine andere Version des JDK/JRE gebaut und es funktionierte, nach dem Download der Quellen für rt.java und Durchlaufen fand ich, dass die CryptoBase-Klasse zwei JavaKeyStores instanziiert, die erste (meine .jks-Datei), die instanziiert wurde, aber die zweite war der 'cacerts'-Schlüsselspeicher in' jre \ lib \ security> ', der nicht das Standardpasswort von' changeit' hatte, das den Fehler verursachte; Ich habe jetzt das Passwort auf dem JRE Keystore geändert und ich arbeite gut in meinem ursprünglichen jre/jdk. Also vielen Dank für die Bestätigung, dass dies eine Konfiguration war .. – Waltzy
... Problem und kein Coding-Problem für mich. Ich bin jedoch verabscheut, weil mein Kopfgeld verschwendet wird. Wenn Sie also etwas mit einem ähnlichen Effekt schreiben wollen, kann ich es Ihnen verleihen. – Waltzy