为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以强制 SSLHandshake 始终使用主机名,而不是 HttpsUrlConnection

是否可以强制 SSLHandshake 始终使用主机名,而不是 HttpsUrlConnection

隔江千里 2022-12-28 16:23:26
所以我有这种情况:我尝试使用 HTTPS 从 somedomain.com 下载图像。该域可能配置错误,但不幸的是我无法更改它。到底发生了什么:当我浏览到https://somedomain.com/animage.jpg时,我得到了为 somedomain.com 颁发的有效证书,这是完美的。但是当我使用它的 IP 地址调用同一个站点时,比如https://123.123.123.123 - 我得到了 *.hostingcompany.com 的(也是有效的)证书 - 托管公司的证书。现在,我尝试使用 Java 下载文件的内容HttpsUrlConnection,没什么特别的:var urlConnection = new URL(imageUrl).openConnection(); ((HttpURLConnection) urlConnection).getResponseCode();(我想先查看响应码,但这里不重要。)此代码在 Spring Boot 应用程序中运行,并根据请求运行。它适用于启动应用程序后的第一个请求。每个后续请求都失败并显示java.security.cert.CertificateException: No subject alternative DNS name matching somedomain.com found。这是因为在每个后续请求中,SSL 握手都会发送到 IP,而不是主机名,并获得托管公司的证书。我试图为 SSL 类找到不同的设置,但无济于事。我知道有一个变通方法,我可以提供自己的变通方法,HostnameVerifier它可以返回 true,但这并不安全,所以我不想那样做。有人遇到过这样的问题吗?也许我在错误的地方搜索?也许是 DNSes 的问题?我将不胜感激任何帮助。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

原来这是 Java 11.01 中的一个错误。自 11.02 起已修复。切换到 11.03 后。我上面描述的行为消失了。每个请求都会获得适当的证书。

以下是错误的详细信息:https ://bugs.openjdk.java.net/browse/JDK-8211806


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信