Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

When using the SeaLights test listener as a javaagent in WebSphere, it fails to connect to our server with the exception Cannot find the specified class ClassNotFoundException for com.ibm.websphere.ssl.protocol.SSLSocketFactory

Code Block
languagetext
[SEALIGHTS] (... <Certificate chain received from hostname - xxx.xxx.xxx.xxx --> app.sealights.co failed hostname verification check. Certificate contained *.sealights.co but check expected app.sealights.co>) Error: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
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:10)
	...

Cause

This is a known issue with WebSphere when SSL is enabled and using a JDK from the WebSphere Application Server (see references below).

When the IBM WebSphere Application Server starts up it sets the security property to the WebSphere default of com.ibm.websphere.ssl.protocol.SSLSocketFactory. Unfortunately the class com.ibm.websphere.ssl.protocol.SSLSocketFactory is but this class is not visible to the Java agent, thus the ClassNotFoundException is raised when trying to open a secured connection to Sealights' servers.

Solution

This issue can be resolved by creating a file called sl.java.security with the following content

Code Block
ssl.SocketFactory.provider=
ssl.ServerSocketFactory.provider=

And then add the following parameter to the JVM argsarguments of webSphere WebSphere alongside our javaagent: 

Code Block
-Djava.security.properties=fullPathTo/sl.java.security

Another solution is to provide and enforce the usage of to set WebSphere SSL configuration to use the IBM JSSE implementation with by defining the following content of sl.java.security file as below

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

...