Frage

ich ein Programm haben, das angeblich eine Datei an einen Web-Service zu senden, die eine SSL-Verbindung erfordert. Ich betreibe das Programm wie folgt:

SET JAVA_HOME=C:\Program Files\Java\jre1.6.0_07
SET com.ibm.SSL.ConfigURL=ssl.client.props
"%JAVA_HOME%\bin\java" -cp ".;Test.jar" ca.mypackage.Main

Das war funktioniert gut, aber wenn ich die erste Zeile ändern

SET JAVA_HOME=C:\Program Files\IBM\SDP\runtimes\base_v7\java\jre

ich die folgende Fehlermeldung erhalten:

com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:119)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:140)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:86)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:593)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:552)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:537)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:434)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:247)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:132)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:242)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:222)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:115)
at $Proxy26.fileSubmit(Unknown Source)
at com.testing.TestingSoapProxy.fileSubmit(TestingSoapProxy.java:81)
at ca.mypackage.Main.main(Main.java:63)
Caused by: java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
at javax.net.ssl.DefaultSSLSocketFactory.a(SSLSocketFactory.java:7)
at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:1)
at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:110)
at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:14)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:902)
at com.ibm.net.ssl.www2.protocol.https.b.getOutputStream(b.java:86)
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:107)
... 14 more
Caused by: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
at javax.net.ssl.SSLJsseUtil.b(SSLJsseUtil.java:20)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:36)
at javax.net.ssl.HttpsURLConnection.getDefaultSSLSocketFactory(HttpsURLConnection.java:16)
at javax.net.ssl.HttpsURLConnection.<init>(HttpsURLConnection.java:36)
at com.ibm.net.ssl.www2.protocol.https.b.<init>(b.java:1)
at com.ibm.net.ssl.www2.protocol.https.Handler.openConnection(Handler.java:11)
at java.net.URL.openConnection(URL.java:995)
at com.sun.xml.internal.ws.api.EndpointAddress.openConnection(EndpointAddress.java:206)
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.createHttpConnection(HttpClientTransport.java:277)
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:103)
... 14 more

So scheint es, dass dieses Problem auf den JRE mich in Beziehung gesetzt werden würde ist mit, aber was scheint nicht sinn zu voll ist, dass der Nicht-IBM JRE funktioniert gut, aber die IBM JRE nicht. Irgendwelche Ideen oder Anregungen?

War es hilfreich?

Lösung

Wenn Ihr nicht IBM jre Sonne ist, dann kommt es bereits bei der Implementierung von SSL-Klassen verpackt mit.

Es scheint, die IBM jre ist nicht SSL-Implementierungsklassen überhaupt enthält.

Andere Tipps

Versuchen

Hinzufügen dieser zwei Zeilen irgendwo in Ihrem Setup-Code:

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

Java erlaubt nur eine SSL-Verbindung Factory-Klasse für eine JVM. Wenn Sie ein JDK, das ist mit WebSphere Application Server ausgeliefert werden mit v6x / 7x / 8x oder andere WebSphere-Server-Tools in Rational Application Developer, dann die erfordern IBM (com.ibm.websphere.ssl.protocol.SSLSocketFactory) bestimmte Klasse von WebSphere Application Server-Laufzeit. da die Java-Sicherheitsdatei, die JSSE Buchse Fabriken wie unter

hat
# Default JSSE socket factories
#ssl.SocketFactory.provider=com.ibm.jsse2.SSLSocketFactoryImpl
#ssl.ServerSocketFactory.provider=com.ibm.jsse2.SSLServerSocketFactoryImpl

# WebSphere socket factories (in cryptosf.jar)
ssl.SocketFactory.provider=com.ibm.websphere.ssl.protocol.SSLSocketFactory
ssl.ServerSocketFactory.provider=com.ibm.websphere.ssl.protocol.SSLServerSocketFactory

Also, wenn Sie den Standard JSSE Sockel Fabriken und kommentieren Sie die WebSphere diejenigen Kommentar- dann kotzen WURDE wird.

Bessere Arbeit um wäre com.ibm.ws.security.crypto.jar Datei in Ihrem Klassenpfad zu haben. Diese JAR-Datei hat eine Abhängigkeit von com.ibm.ffdc.jar Datei, so dass Sie, dass in Ihrem Classpath gut brauchen. Beide jarfiles sind unter <WebSphere_Install_Dirctory>/plugins/

man diese Eigenschaften bei WAS_HOME / * / java / jre / lib / security / java.security Datei gesetzt werden folgende JSSE Requisiten von uncomenting.

Standard JSSE Buchse Fabriken

ssl.SocketFactory.provider = com.ibm.jsse2.SSLSocketFactoryImpl ssl.ServerSocketFactory.provider = com.ibm.jsse2.SSLServerSocketFactoryImpl

Eine weitere „Lösung“, die für mich zu arbeiten scheint. Erstellen Sie Ihre eigene Sicherheitseigenschaften Datei, my.java.security mit Inhalt wie:

ssl.SocketFactory.provider=
ssl.ServerSocketFactory.provider=

Wenn Java Aufruf (oder in meinem Fall Maven), fügen Sie die Befehlszeilenoption:

-Djava.security.properties=C:\myfiles\my.java.security

abgeschaut von der IBM Liberty-Dokumentation: http://www-01.ibm.com/support/knowledgecenter/was_beta_liberty/com.ibm.websphere.wlp.nd.multiplatform.doc/ae/rwlp_trouble.html ? lang = de

Dieses Thema gefunden, während für die gleiche Fehlermeldung gesucht, aber eine andere Lösung gefunden. Um zu testen, einen https REST-Dienst des Apache Wink-Client verwenden:

ClientConfig config = new ClientConfig();
config.setBypassHostnameVerification(true);
RestClient client = new RestClient(config);

ein und die Factory leer:

Security.setProperty("ssl.SocketFactory.provider", "");
Security.setProperty("ssl.ServerSocketFactory.provider", "");

Meine Laufzeit ist ein Standalone-Camel-Test IBM JRE 1.7 von IBM WebSphere v8.5.5.

Ich hatte ein ähnliches Problem, wenn meine Batch-Anwendung wurde versucht, Daten von Restful Web-Service-Nachricht unter Verwendung von Apache zu holen. Ich war mit MyEclipse als meine Dev-Umgebung. Und wurde mit der jre zur Verfügung gestellt von IBM Websphere 8.5. Als ich nach Sun 1.6 jre geändert, wurde das Problem behoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top