JSSEHelper未提供正确的SSLSocketFactory,用于在Websphere 8.0中扩展安全连接
我使用的是8.0版本的WebSphereApplicationServer。我试图从JSSEHelper获得SSLSocketFactory。虽然JSSEHelper未提供正确的SSLSocketFactory,用于在Websphere 8.0中扩展安全连接,ssl,encryption,socket.io,websphere,block-cipher,Ssl,Encryption,Socket.io,Websphere,Block Cipher,我使用的是8.0版本的WebSphereApplicationServer。我试图从JSSEHelper获得SSLSocketFactory。虽然 我成功地获得了SSLSocketFactory 我已成功地从SSLSocketFactory获得SSLSocket 我成功地建立了安全连接 但ClientHello消息中提供的密码套件与 CellDefault SSL设置/NodeDefaultSSL设置/NodeDefaultnor 也不是我自己的自定义SSL配置 此问题的解决方案是避免从JSS
此问题的解决方案是避免从JSSEHelper检索SSLSocketFactory。我应该使用SSLSocketFactory类中的静态方法getDefault(),而不是使用JSSEHelper:
} 详情请参阅:
请任何人澄清为什么这一声明:
slSocketFactory = jsseHelper.getSSLSocketFactory(sslMap, sslProps)
SSLSocketFactory factory = SSLSocketFactory.getDefault();
在执行此语句时返回不正确的“SSL套接字工厂”
SSLSocketFactory.getDefault()
返回正确的一个?
此外,在什么情况下,我应该分别使用从这些语句中检索到的工厂
非常感谢尽管这不是直观的,但声明:
slSocketFactory = jsseHelper.getSSLSocketFactory(sslMap, sslProps)
SSLSocketFactory factory = SSLSocketFactory.getDefault();
返回WebSphere自定义SSLSocketFactory
然后,您可以通过以下方式在线程上强制SSL配置:
Properties sslProperties = getProperties();
jsseHelper.setSSLPropertiesOnThread(sslProperties);
SSLSocket socket = getSslSocket();
CommonIO.writeToSocket(socket, "127.0.0.1", 1234);
jsseHelper.setSSLPropertiesOnThread(null);
尽管JSSEHelper.getSSLSocketFactory(sslMap,sslConfig_XYZ)也返回工厂,但它们的套接字忽略了封装在SSL配置中的密码套件
另一方面,如果您只想强制执行
JSSEHelper.getSSLSocketFactory(sslMap, sslConfig_XYZ)
足够了。在SSL套接字上设置了密码。如果您使用的是WAS自定义套接字工厂,则密码将直接在SSL套接字上设置。在WebSphere上调用SSLSocketFactory.getDefault()的情况下,您将获得一个WebSphere自定义SSLSocketFactory,WAS将处理在返回的SSL套接字上设置密码。当您从JSSE获得SSLSocketFactory时,您将获得基于SSL配置信息(如keystore和truststore)创建的JSSE SSLSocketFactory,但我们无法在套接字工厂上设置密码。请使用JSSEHelper.getSSLSocketFactory(connectionInfo,properties)如果希望基于特定属性构建SSLSocketFactory,或者希望动态出站连接与connectionInfo匹配。使用JSSEHelper.getSSLSocketFactory(别名、connectionInfo、listener)根据连接信息或与侦听器关联的信息获取特定SSL配置的套接字工厂。我将返回一个JSSE套接字工厂,该工厂没有设置密码。非常感谢。这很有帮助!