背景说明:
最近做接口开发时,需要调用调用第三方系统的接口,一开始用的是http的接口后来改为用https的协议,发现接口调用时会报错:java.lang.Exception: 调用OA接口服务发生异常:java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory
后来将协议重新调整回http类型,就能正常发送过去
但基于安全层面考虑,接口需要支持https,测试环境可以用http,但正式环境需要兼容https。
在工具搜索,确实找不到com.ibm.websphere.ssl.protocol.SSLSocketFactory这个类
网上说需要改java的设置:https://blog.csdn.net/yanical/article/details/5991693(可以参考)
后来调整了正式环境相关的设置:
解决方法: 更改 <IBM_JAVA_HOME>/jre/lib/security/java.security里的设置,改成
# 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.websphdere.ssl.protocol.SSLServerSocketFactory
这种,然后重启应用服务后,问题得以解决
解决步骤:
1、找到java的安装目录
对应命令:which java
2、目前项目用的ibm的jdk
java version "1.7.0"
Java(TM) SE Runtime Environment (build pxa6470sr4fp1ifix-20130423_02(SR4 FP1+IV38579+IV38399+IV40208))
IBM J9 VM (build 2.6, JRE 1.7.0 Linux amd64-64 Compressed References 20130421_145945 (JIT enabled, AOT enabled)
J9VM - R26_Java726_SR4_FP1_2_20130421_2353_B145945
JIT - r11.b03_20130131_32403ifx4
GC - R26_Java726_SR4_FP1_2_20130421_2353_B145945_CMPRSS
J9CL - 20130422_145945)
JCL - 20130225_01 based on Oracle 7u13-b08
3、切换到对应目录
4、修改相关文件前先备份 cp java.security java.securitybak_20200330
5、使用vi命令修改相关配置
修改前默认使用的是下面的配置,但是com.ibm.websphere.ssl.protocol.SSLSocketFactory和com.ibm.websphere.ssl.protocol.SSLServerSocketFactory需要配合WAS使用,项目使用单机部署,缺省cryptosf.jar文件,因此可以把上面的配置放开,使用com.ibm.jsse2.SSLSocketFactoryImpl即可(如图所示)。
后记:
由于本项目使用的jdk版本为IBM1.7,上述方法只能解决对方https接口协议是TLSv1的情况,如果对方系统接口协议是TLSv1.2的,需要升级jdk版本,具体可以参考:https://blog.csdn.net/junch_wuhan/article/details/114550760?spm=1001.2014.3001.5501