gpt4 book ai didi

java - 如何仅为单个 HTTPURLConnection 将 “jsse.enableSNIExtension” 设置为 false?

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

我目前有一个应用程序可以向很多 URL 发出 HTTP post 请求。某些连接失败,出现以下异常。

Exception in thread "main" javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1410) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2004) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)

. . .

因此,我只想为抛出上述异常的特定连接将“jsse.enableSNIExtension”设置为 false。

如何在 HTTPsURLConnection/SSLSocket 级别上执行此操作?

代码

URL url = new URL("https://artofskinmd.localgiftcards.com/");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

httpConnection.connect();

我正在尝试找到一种方法来更改 HttpsURLConnection 对象的 SSLParameters。但是我找不到任何用于设置空服务器名称列表的 setSSLParameters() 方法。我无法在网上找到任何有关为 HttpURLConnection、SSLContext 等设置 SSLParameters 的内容

最佳答案

很明显该站点依赖于SNI,否则它不会关心客户端在SNI扩展中发送的名称。这意味着禁用扩展可能无济于事,但您可能会遇到一些握手失败或某些默认站点(和证书),而且可能不是您想要的站点。要解决此问题,您不应禁用 SNI,而应使用正确的名称,即站点期望的名称。

编辑:这看起来既是错误的服务器配置,又是 Java7 和 Java8 中的错误。访问 URL https://artofskinmd.localgiftcards.com/ 将导致 unknown_name TLS 警报 warning Java7 和 Java8 错误地认为它是致命的(与非常旧的 OpenSSL 相同0.9.8).在这种情况下禁用 SNI 实际上会有所帮助,但似乎没有办法为单个 HttpURLConnection 对象禁用 SNI。

关于java - 如何仅为单个 HTTPURLConnection 将 “jsse.enableSNIExtension” 设置为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068009/

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