i正在使用8.0版本的WebSphere Application Server。我试图从Jssehelper获得SSLSocketFactory。
- 我成功获得了sslsocketFactory
- 我成功地从sslsocketFactory获得了SSLSocket
- 我已经成功建立了安全连接,
但是,客户端消息中提供的密码套件既不对应于
- CellDefault SSL设置/NodedeDefault SSL设置/NodedeDefaultNor
- 也不是我自己的自定义SSL配置。
解决此问题的解决方案是避免从Jssehelper中检索SSLSocketFactory。我不应该使用static方法getDefault(),而不是使用jssehelper。
public SSLSocket getSslSocket(Properties sslProps) {
SSLSocketFactory factory = SSLSocketFactory.getDefault();
SSLSocket socket = null;
try {
socket = (SSLSocket) factory.createSocket();
} catch (IOException e) {
e.printStackTrace();
}
return socket;
}
更多详细信息可以在此处找到:
有人可以澄清为什么此陈述:
slSocketFactory = jsseHelper.getSSLSocketFactory(sslMap, sslProps)
此语句
返回错误的" SSL套接字工厂"SSLSocketFactory.getDefault()
返回正确的一个?
此外,在什么情况下,我应该分别使用从这些陈述中检索的工厂?
- sslsocketFactory.getDefault();
- jssehelper.getsslsocketFactory(sslmap,sslprops)
- getslsocketFactory(java.lang.string sslaliasname,java.util.map connectioninfo,sslconfigchangelistener侦听器)
非常感谢
尽管它不是直观的,但语句:
SSLSocketFactory factory = SSLSocketFactory.getDefault();
返回 WebSphere自定义SSLSocketFactory 。
然后,您可以以这种方式在线程上执行SSL-Configuration:
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-Configuration SSLCONFIG_XYZ 。 另一方面,如果您只想执行 此方法: 足够。JSSEHelper.getSSLSocketFactory(sslMap, sslConfig_XYZ)