Problem
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 com.ibm.websphere.ssl.protocol.SSLSocketFactory
... <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>
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 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
ssl.SocketFactory.provider= ssl.ServerSocketFactory.provider=
And then add the following parameter to the JVM arguments of WebSphere alongside our javaagent:
-Djava.security.properties=fullPathTo/sl.java.security
Another solution is to set WebSphere SSL configuration to use the IBM JSSE implementation by defining the content of sl.java.security
file as below
ssl.SocketFactory.provider=com.ibm.jsse2.SSLSocketFactoryImpl ssl.ServerSocketFactory.provider=com.ibm.jsse2.SSLServerSocketFactoryImpl