gpt4 book ai didi

java - ClientHello 仅传递一种可用的密码套件,导致握手错误

转载 作者:行者123 更新时间:2023-12-01 16:44:40 29 4
gpt4 key购买 nike

我们正在运行一个 gradle + java + spring boot 后端,通过 SOAP 与外部服务器进行通信。它最初是使用 Java 8 构建的。

最近服务器已将其接受的密码套件列表更新为 ECDHE 算法,这导致了连接问题。使用-Djavax.net.debug=all进一步检查后( -Djavax.net.debug=ssl 由于某种原因没有记录太多)我们注意到我们的 ClientHello 看起来像这样:

javax.net.ssl|WARNING|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.343 CDT|SignatureScheme.java:283|Signature algorithm, ed25519, is not supported by the underlying providers
javax.net.ssl|WARNING|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.343 CDT|SignatureScheme.java:283|Signature algorithm, ed448, is not supported by the underlying providers
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.364 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: x25519
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: secp256r1
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: secp384r1
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: secp521r1
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: x448
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: ffdhe2048
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: ffdhe3072
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: ffdhe4096
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: ffdhe6144
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:404|Ignore inactive or disabled named group: ffdhe8192
javax.net.ssl|WARNING|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SupportedGroupsExtension.java:411|no available named group
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SSLExtensions.java:257|Ignore, context unavailable extension: supported_groups
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|ECPointFormatsExtension.java:195|Need no ec_point_formats extension
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.365 CDT|SSLExtensions.java:257|Ignore, context unavailable extension: ec_point_formats
javax.net.ssl|ALL|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.366 CDT|SignatureScheme.java:359|Ignore disabled signature scheme: rsa_md5
javax.net.ssl|INFO|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.366 CDT|AlpnExtension.java:161|No available application protocols
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.366 CDT|SSLExtensions.java:257|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.366 CDT|SessionTicketExtension.java:396|Stateless resumption not supported
javax.net.ssl|DEBUG|1F|http-nio-8080-exec-10|2020-05-14 10:35:25.366 CDT|SSLExtensions.java:257|Ignore, context unavailable extension: session_ticket
"ClientHello": {
"client version" : "TLSv1.2",
"random" : "42 29 61 3C 0F 40 99 21 AC 24 0B BE 2C B4 83 25 CC 42 D5 60 D7 A1 72 F8 DF 7D C5 9D 8A EE 3B 07",
"session id" : "",
"cipher suites" : "[TLS_RSA_WITH_AES_128_CBC_SHA(0x002F)]",
"compression methods" : "00",
"extensions" : [
"server_name (0)": {
type=host_name (0), value=blah blah blah
},
"status_request (5)": {
"certificate status type": ocsp
"OCSP status request": {
"responder_id": <empty>
"request extensions": {
<empty>
}
}

看起来我们只公开了服务器不支持的一种密码套件。在服务器上工作的人认为这可能是我们的 x509 证书的问题,但我们在加载证书的soapUI中尝试了相同的交互,并且选择了正确的密码套件,通信很顺利。连接到该服务器的另一个团队也遇到了此问题,但仅此一点并不表明这是服务器问题。

根据我的理解,正常的 ClientHello 应该公开客户端的可用密码,并且服务器将从列表中选择一个。我们知道我们有可用的密码,因为我们运行了这个脚本: jrunscript -e "java.util.Arrays.asList(javax.net.ssl.SSLServerSocketFactory.getDefault().getSupportedCipherSuites()).stream().forEach(println)"

在其他帖子中我看到 -Djavax.net.debug=ssl将显示应用程序是否拒绝某些密码,但由于我无法理解的原因,我们无法看到这一点。我们不直接管理 SSL 连接,很大程度上将其留给内置的东西,我对此只有模糊的理解。与我一起工作的人说这可能是 HttpURLConnection 的问题,但不知 Prop 体是什么。

另一位团队成员已发布 this ,这涉及我们尝试过的一些事情。

我的主要问题是什么可能阻止我们的应用程序发送更多密码?我不确定是否一直都是这样,但有可能,因为我们自己不管理连接。如果我们必须手动设置我们传递的密码,我们会怎么做?

提前致谢。

最佳答案

我明白了。

搞乱了 gradle 和导入的 apache HTTPCore 以及将我们的 HTTPClient 更新到最新版本。下一个干净的构建标记了一个警告,表明某个类已被弃用,并且在同一个文件中是要发送的密码套件的配置。对于 future ,它看起来像这样:

    @Bean
public SSLConnectionSocketFactory sslConnectionSocketFactory(SSLContext sslContext) {
return new SSLConnectionSocketFactory(
sslContext,
new String[]{TLS_VERSION_1_2, TLS_VERSION_1_0},
new String[]{
"PUT YOUR CIPHERS HERE",
"AND HERE"
},
null);
}

SSLConnectionSocketFactory 已被弃用。

所以问题是我们不知道它存在于我们的代码库中,但如果我们对单个密码进行文本搜索,我们就会更早地在项目中找到它。噢

关于java - ClientHello 仅传递一种可用的密码套件,导致握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61803381/

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