Ssl 如何指定要在axis2 https发件人上使用的密码?

Ssl 如何指定要在axis2 https发件人上使用的密码?,ssl,axis2,wso2esb,Ssl,Axis2,Wso2esb,我们的WSO2 ESB连接到一个SSL服务器,该服务器最近经过修补以删除弱/不安全的SSL协议和密码。通过向Axis2_blocking_client.xml配置文件中的https sender元素添加以下参数,我已经能够更改Axis2 https sender使用的协议 <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSend

我们的WSO2 ESB连接到一个SSL服务器,该服务器最近经过修补以删除弱/不安全的SSL协议和密码。通过向Axis2_blocking_client.xml配置文件中的https sender元素添加以下参数,我已经能够更改Axis2 https sender使用的协议

<transportSender name="https"
                 class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
    <parameter name="PROTOCOL">HTTP/1.1</parameter>
    <parameter name="HttpsProtocols">TLSv1,TLSv1.1,TLSv1.2</parameter>
    <parameter name="Transfer-Encoding">chunked</parameter>
    <parameter name="cacheHttpClient">true</parameter>
    <parameter name="defaultMaxConnectionsPerHost">200</parameter>
</transportSender>
下面是ESB提供的内容

 TLS_RSA_WITH_AES_128_CBC_SHA
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
 TLS_DHE_DSS_WITH_AES_128_CBC_SHA
 TLS_RSA_WITH_RC4_128_SHA
 TLS_RSA_WITH_3DES_EDE_CBC_SHA
 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
 TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
 TLS_RSA_WITH_RC4_128_MD5
p.p.S。 以下是从服务器的角度捕获的数据包:

新的TCP连接#3:XXX.XXX.XXX.XXX(40922)XXX.XXX.XXX.XXX(8006) 1 1435165035.7617(0.0292)C>SV3.1(185)握手 克利恩塞洛

    Version 3.1
    random[32]=
      55 8a e1 6b f3 30 a8 68 42 dd f0 b4 96 c6 39 9d
      15 78 3d bd b2 77 2b 76 39 82 c4 2e 98 be 71 92

    cipher suites
    Unknown value 0xc009
    Unknown value 0xc013
    TLS_RSA_WITH_AES_128_CBC_SHA
    Unknown value 0xc004
    Unknown value 0xc00e
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA
    Unknown value 0xc007
    Unknown value 0xc011
    TLS_RSA_WITH_RC4_128_SHA
    Unknown value 0xc002
    Unknown value 0xc00c
    Unknown value 0xc008
    Unknown value 0xc012
    TLS_RSA_WITH_3DES_EDE_CBC_SHA
    Unknown value 0xc003
    Unknown value 0xc00d
    TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
    TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
    TLS_RSA_WITH_RC4_128_MD5
    Unknown value 0xff
    compression methods
              NULL
1 2 1435165035.7617(0.0000)S>CV3.1(2)警报 致命级别 值握手失败
1 1435165035.7618(0.0000)S>C TCP FIN

我没有检查Axis 2的最新版本,但是您应该能够使用与中所述相同的原理设置协议和密码套件

基本上,您需要向ApacheHTTP客户端3.x注册
SecureProtocolFactory
(如果它仍在使用Axis2):

您可以将工厂的默认行为扩展或委托给。但是,在从
createSocket
方法返回
SSLSocket
实例之前,请使用所需的设置调用
setenablediphersuites(…)
setEnabledProtocols(…)

也就是说,从客户端发送的密码套件列表中,基于根本没有对其进行配置的假设(因此将使用默认设置),我猜测您可能正在运行旧版本的JRE(请参阅)

我不确定Axis2是如何通过代码偏离默认设置的,但是如果您能够使用Java 8,那么可能值得尝试新的设置(尽管对于Java 8,默认情况下应该启用TLS 1.2)。在这种情况下,您可能根本不需要更改任何代码。如果可能,使用JCE Unlimited Strength辖区策略文件也将有助于AES 256密码套件

编辑之后,您的客户机发送的密码套件名称似乎比您想象的要多。您用来转储
ClientHello
的内容无法计算出这些未知值是什么,但它包含的密码套件比您记录的要多<代码>0xc0009将是
TLS\u ECDHE\u ECDSA\u和\u AES\u 128\u CBC\u SHA
(请参阅)。在命名方面,最重要的是。OpenSSL和Java名称也不完全相同


虽然这个答案应该回答“如何指定在我的axis2 https发件人上使用哪些密码?”,但这可能无法帮助您解决实际问题。

axis2_blocking_client.xml中的TLSv1、TLSv1.1、TLSv1.2设置在哪里??它看起来也像是带有RC4_128_SHA的TLS_RSA_,
TLS\u RSA\u与\u AES\u 128\u CBC\u SHA
TLS\u RSA\u与\u 3DES\u EDE\u CBC\u SHA
无论如何都是这两个列表之间的匹配。这是什么样的服务器?你确定两边都启用了吗?@Bruno,我假设密码套件只有在全名匹配的情况下才是等效的。但您的意思是,对于SSL握手协商,TLS_RSA_WITH_RC4_128_SHA和RSA_WITH_RC4_128_SHA应被视为等效密码?如果是这样的话,我需要对这个问题做更多的研究。它运行的是什么服务器?例如,您是否使用(或服务器是否期望)客户端证书?顺便说一下,不确定您在哪里找到了
HttpsProtocols
参数的文档。该参数来自。我连接的服务器严格来说不是一个服务器,而是一个F5负载平衡器,位于两个Websphere服务器前面。直到安全审计建议F5管理员禁用弱协议和密码切换到java 1.8允许我完成SSL握手,但它破坏了应用程序的其他部分时,整个想法才起作用。正如你所说,这解决了如何连接(这就是问题所在),但不是我的根本问题。因此,我认为你的回答是正确的。
    Version 3.1
    random[32]=
      55 8a e1 6b f3 30 a8 68 42 dd f0 b4 96 c6 39 9d
      15 78 3d bd b2 77 2b 76 39 82 c4 2e 98 be 71 92

    cipher suites
    Unknown value 0xc009
    Unknown value 0xc013
    TLS_RSA_WITH_AES_128_CBC_SHA
    Unknown value 0xc004
    Unknown value 0xc00e
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA
    Unknown value 0xc007
    Unknown value 0xc011
    TLS_RSA_WITH_RC4_128_SHA
    Unknown value 0xc002
    Unknown value 0xc00c
    Unknown value 0xc008
    Unknown value 0xc012
    TLS_RSA_WITH_3DES_EDE_CBC_SHA
    Unknown value 0xc003
    Unknown value 0xc00d
    TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
    TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
    TLS_RSA_WITH_RC4_128_MD5
    Unknown value 0xff
    compression methods
              NULL
Protocol.registerProtocol("https", new Protocol("https",
   (ProtocolSocketFactory)secureProtocolSocketFactory, 443));