JSSEHelper未提供正确的SSLSocketFactory,用于在Websphere 8.0中扩展安全连接

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

我使用的是8.0版本的WebSphereApplicationServer。我试图从JSSEHelper获得SSLSocketFactory。虽然

  • 我成功地获得了SSLSocketFactory
  • 我已成功地从SSLSocketFactory获得SSLSocket
  • 我成功地建立了安全连接
  • 但ClientHello消息中提供的密码套件与

  • CellDefault SSL设置/NodeDefaultSSL设置/NodeDefaultnor
  • 也不是我自己的自定义SSL配置

  • 此问题的解决方案是避免从JSSEHelper检索SSLSocketFactory。我应该使用SSLSocketFactory类中的静态方法getDefault(),而不是使用JSSEHelper:

    }

    详情请参阅:
    请任何人澄清为什么这一声明:

    slSocketFactory = jsseHelper.getSSLSocketFactory(sslMap, sslProps)
    
    SSLSocketFactory factory = SSLSocketFactory.getDefault();
    
    在执行此语句时返回不正确的“SSL套接字工厂”

    SSLSocketFactory.getDefault()
    
    返回正确的一个?
    此外,在什么情况下,我应该分别使用从这些语句中检索到的工厂

  • SSLSocketFactory.getDefault()
  • jsseHelper.getSSLSocketFactory(sslMap、sslProps)
  • getSSLSocketFactory(java.lang.String sslAliasName、java.util.Map connectionInfo、SSLConfigChangeListener侦听器)

  • 非常感谢

    尽管这不是直观的,但声明:

    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套接字工厂,该工厂没有设置密码。非常感谢。这很有帮助!