InvalidAlgorithmParameterException bei SSL-zugriff

 
rabli
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 2
Dabei seit: 12 / 2010
Betreff:

InvalidAlgorithmParameterException bei SSL-zugriff

 · 
Gepostet: 17.12.2010 - 14:00 Uhr  ·  #1
Hallo zusammen,

ich versuche, über hbci4java auf mein Konto zuzugreifen. Vermutlich
bei dem https-Zugriff fällt folgende Exception:

Code
<ERR> [2010.12.17 13:58:23.801] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Senden der HBCI-Nachricht zum Server
  at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:136)
  at org.kapott.hbci.comm.Comm.pingpong(Comm.java:66)
  at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:358)
  at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:184)
  at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:227)
  at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:371)
  at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:196)
  at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:131)
  at org.kapott.hbci.tools.AnalyzeReportOfTransactions.main(AnalyzeReportOfTransactions.java:114)
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
  at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1649)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1612)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1595)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1172)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
  at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
  at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
  at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
  at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:126)
  ... 8 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
  at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:57)
  at sun.security.validator.Validator.getInstance(Validator.java:161)
  at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:108)
  at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:204)
  at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
  at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185)
  at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
  at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
  at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
  ... 13 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
  at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:183)
  at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:103)
  at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:87)
  at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:55)
  ... 24 more
<DBG> [2010.12.17 13:58:23.813] [main/main] passport.AbstractPinTanPassport: dialog init ended with errors - searching for return code 'wrong PIN'
<DBG> [2010.12.17 13:58:23.818] [main/main] passport.AbstractPinTanPassport: autosecfunc: search for 3920s in response to detect allowed twostep secmechs
<DBG> [2010.12.17 13:58:23.818] [main/main] manager.HBCIInstitute: extracting BPD from results
<DBG> [2010.12.17 13:58:23.891] [main/main] passport.HBCIPassportPinTan: saving two step mechs: 
<DBG> [2010.12.17 13:58:23.894] [main/main] passport.HBCIPassportPinTan: saving current tan method: 999
beende Dialog
<ERR> [2010.12.17 13:58:23.899] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.HBCI_Exception: kann HBCI-Wert für MsgHead.dialogid nicht auf null setzen
  at org.kapott.hbci.manager.HBCIKernelImpl.rawSet(HBCIKernelImpl.java:172)
  at org.kapott.hbci.manager.HBCIInstitute.doDialogEnd(HBCIInstitute.java:183)
  at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:248)
  at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:371)
  at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:196)
  at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:131)
  at org.kapott.hbci.tools.AnalyzeReportOfTransactions.main(AnalyzeReportOfTransactions.java:114)
<ERR> [2010.12.17 13:58:23.900] [main/main] manager.HBCIInstitute: fetching BPD failed: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
<ERR> [2010.12.17 13:58:23.904] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.ProcessException: Abholen der BPD fehlgeschlagen
  at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:255)
  at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:371)
  at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:196)
  at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:131)
  at org.kapott.hbci.tools.AnalyzeReportOfTransactions.main(AnalyzeReportOfTransactions.java:114)
<ERR> [2010.12.17 13:58:23.905] [main/main] manager.HBCIInstitute: FAILED! - maybe this institute does not support anonymous logins


Betriebssystem ist Ubuntu 10.04, jre ist die /usr/lib/jvm/java-6-sun-1.6.0.22.

Unter lib ist kein Verzeichnis mit Zertifikaten (ich weiss im
Augenblick nicht, wie das Verzeichnis heißen müsste.)

Hat jemand Rat ?

Gruß Rainer
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10781
Dabei seit: 03 / 2005
Betreff:

Re: InvalidAlgorithmParameterException bei SSL-zugriff

 · 
Gepostet: 17.12.2010 - 17:31 Uhr  ·  #2
Das Problem ist eigentlich nicht HBCI4Java-spezifisch. Von daher denke ich, dass du in de.comp.lang.java eigentlich doch besser aufgehoben waerst - auch wenn Michael dich hierher verwiesen hatte ;)

Auf solche Problem stoesst man generell, wenn man versucht, mit Java HTTPS-Verbindungen aufzubauen (was hbci4java ja intern bei der Verwendung des PIN/TAN-Verfahrens auch tut).

Eine HTTPS-Verbindung ist ueber ein SSL-Zertifikat gesichert. Der Client (hier Java) prueft dessen Gueltigkeit. Diese Pruefung kann aus vielerlei Gruenden fehlschlagen, u.a.:

- das Zertifikat ist abgelaufen
- der im Zertifikat angegebene Hostname stimmt nicht mit dem tatsaechlichen ueberein
- Die Vertrauenskette konnte mangels CA-Zertifikaten nicht geprueft werden.

Diese Pruefung findet im Java TrustManager statt. Ebenso vielfaeltig wie die Ursachen sind auch die moeglichen Loesungen.

a) Besorge dir das SSL-Zertifikat des Bank-Servers bzw. das der signierenden CA und importiere es in Java. Google nach "Java import certificate"

b) Finde heraus, warum das Zertifikat des Bank-Servers nicht ueber die bei Java mitgelieferten Root-Zertifikate (in "cacerts") verifiziert werden konnte. Ist deine Java-Installation vielleicht unvollstaendig? Ist es wirklich der echte Bank-Server?

c) Implementiere einen eigenen TrustManager und pruefe das Zertifikat selbst. Google nach "Java custom trustmanager"

d) Finde heraus, welche Konfigurations-Parameter hbci4java unterstuetzt, um das SSL-Verhalten zu beeinflussen. Lies hierzu http://hbci4java.kapott.org/ja…Utils.html


Ich kann dir leider keine konkrete Antwort geben. Zum einen, weil es verschiedenste Ursachen und Loesungen gibt. Zum anderen, weil es als Programmierer wichtig ist, das Thema auch zu verstehen. Es waere nicht Sinn der Sache, die Fehlermeldung irgendwie zu unterdruecken, ohne zu verstehen, welche sicherheitsrelevanten Konsequenzen das haben kann. Insbesondere wenn es um so etwas sensibles wie den Zugriff auf ein Konto geht.

Gruss
Olaf
Gewählte Zitate für Mehrfachzitierung:   0