gpt4 book ai didi

ssl - 如何指定在我的 axis2 https 发件人上使用哪些密码?

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:59 25 4
gpt4 key购买 nike

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

<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 仍然无法连接到服务器,出现 SSL 握手错误。查看服务器上的数据包捕获,我们发现 ESB 提供的所有密码都不在服务器接受的密码列表中。

所以我的问题是,如何在我的 axis2 https 发送器配置中指定使用(或不使用)哪些密码?

附言这是服务器接受的内容

 RSA_WITH_RC4_128_SHA
RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

这就是 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

附言这是从服务器的角度捕获的数据包:

新的 TCP 连接 #3:XXX.XXX.XXX.XXX(40922) <-> XXX.XXX.XXX.XXX(8006)1 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 的最新版本,但您应该能够使用与 this question 中描述的相同原则来设置协议(protocol)和密码套件。 .

基本上,您需要向 Apache HTTP Client 3.x 注册 SecureProtocolFactory(如果它仍在使用 Axis 2):

Protocol.registerProtocol("https", new Protocol("https",
(ProtocolSocketFactory)secureProtocolSocketFactory, 443));

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

也就是说,根据您的客户端发送的密码套件列表,并且基于根本不会配置它的假设(因此它将使用默认设置),我的猜测是您可能正在运行旧版本的 JRE(请参阅 cipher suite table in the SunJSSE provider documentation)。

我不确定 Axis2 如何通过代码偏离默认设置,但如果您能够使用 Java 8,可能值得尝试新的 jdk.tls.client.protocols system property (尽管对于 Java 8,默认情况下应该启用 TLS 1.2)。在这种情况下,您可能根本不需要更改任何代码。如果可能,使用 JCE Unlimited Strength Jurisdiction Policy Files 也有助于 AES 256 密码套件。

在您的编辑之后,您的客户端似乎实际上发送了比您想象的更多的密码套件名称。您用来转储 ClientHello 的内容无法计算出这些未知值是什么,但它包含的密码套件比您写下的要多。 0xc0009 将是 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(参见 full list)。在命名方面,TLS_ or SSL_ prefix is rather flexible depending on the tool you use . OpenSSL 和 Java 名称也不完全相同。

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

关于ssl - 如何指定在我的 axis2 https 发件人上使用哪些密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com