10 Stimmen

"SocketException: Unconnected sockets not implemented" mit selbstsigniertem SSL-Zertifikat

(Ich habe die gleiche Frage auf der jmeter-user Mailingliste gestellt, aber ich wollte es auch hier versuchen - so kann ich zumindest diese Seite mit der Antwort aktualisieren, sobald ich sie gefunden habe).

Ich habe Probleme bei der Verwendung von JMeter um eine Tomcat-Webapp mit einem selbstsignierten SSL-Zertifikat zu testen. JMeter wirft eine SocketException mit der Meldung Unconnected sockets not implemented . Gemäß der JMeter-Dokumentation Die Anwendung ist so konzipiert und geschrieben, dass sie jedes Zertifikat akzeptiert, ob selbst signiert oder von einer Zertifizierungsstelle signiert oder was auch immer.

Ist jemand schon einmal auf diese spezielle Ausnahme gestoßen?

Ich habe versucht, dieses Zertifikat vom Server zu exportieren und es in meinen lokalen Keystore zu importieren (mit keytool -import -alias tomcat -datei ), aber das Ergebnis ist das gleiche.

Ich habe auch versucht, javax.net.debug=all als JVM-Arg zu setzen ( das JSSE-Referenzhandbuch listet dies als Debugging-Schritt auf); allerdings sehe ich nirgendwo eine Debugging-Ausgabe - sollte ich diese irgendwo anders als im Standard-Out/Fehlerfall erwarten?

13voto

Flow Punkte 22785

最も javax.net.SocketFactory Implementierungen definieren alle createSocket() Methoden die Parameter haben als Zusammenfassung. Aber haben eine createSocket() Methode ohne Parameter, die wie folgt aussieht:

public Socket createSocket() throws IOException {
   throw new SocketException("Unconnected sockets not implemented");
}

Wenn Sie also die abstrakte Subklasse javax.net.SocketFactory werden Sie gezwungen, die Methoden mit Parametern zu überschreiben, aber es ist leicht zu verpassen, die createSocket() Methode ohne Parameter. Die Ausnahme wird also ausgelöst, wenn Ihr Code die Methode createSocket() . Überschreiben Sie einfach die Methode und das war's. :)

3voto

Dikla Punkte 3365

Ich hatte das gleiche Problem in meinem Code (nicht im Zusammenhang mit JMeter).

Mein Code verwendet eine selbst definierte SocketFactory . Ich habe herausgefunden, dass die Klasse com.sun.jndi.ldap.Connection ruft einige Methoden der SocketFactory mit Method.invoke() . Eine der Methoden, die er aufzurufen versucht, ist createSocket() - ohne Parameter.

Als ich diese Methode zu meiner Fabrik hinzufügte, funktionierte alles einwandfrei.

2voto

Alexander Punkte 8932

Dies ist eher ein Hinweis als eine richtige Antwort: Ein flüchtiger Blick auf die Google-Ergebnisse scheint darauf hinzudeuten, dass die Ausnahme in der Regel durch den Code verursacht wird, der die Verwendung einer Standard-SSL-Socket-Factory erzwingt, die absichtlich die Ausnahme auslöst, wenn createSocket() für sie aufgerufen wird. Einige der Ergebnisse scheinen darauf hinzudeuten, dass das Problem manchmal aufgrund eines Fehlers in einer bestimmten Version von Java 6 auftritt, oder wenn ein falscher Pfad oder ein falsches Passwort für den Schlüsselspeicher angegeben wird.

Ich würde also sagen, versuchen Sie es mit Java 5. Versuchen Sie außerdem, JMeter auf eine bekannte Website zu verweisen, die korrekte SSL-Zertifikate verwendet. Auf diese Weise können Sie die Hypothese der selbstsignierten Zertifikate testen.

0 Stimmen

Können Sie einige der Links posten, insbesondere die zu den Fehlern in bestimmten Versionen von Java 6?

1 Stimmen

0voto

ScArcher2 Punkte 81775

Ich hatte Web Service Probleme ähnlich wie diese mit jdk 1.6.0_10.

Ich habe auf 1.6.0_16 aktualisiert und alles hat funktioniert.

0voto

Suppressingfire Punkte 3168

Versuchen Sie, Ihren Klassenpfad (in Eclipse, ich tue ctrl-shift-t, um dies zu tun) für SSLSocketFactory* zu suchen. Wenn Sie eine finden, setzen Sie sie als Eigenschaft der Klasse Security:

In meiner Umgebung habe ich die folgenden zwei gefunden:

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");

ou

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.websphere.ssl.protocol.SSLSocketFactory");

(oder für jede andere Klasse, die Sie finden)

Ähnliches gilt für ServerSocketFactory , wenn Sie Server-Sockets benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X