gpt4 book ai didi

java - SSL 协议(protocol)异常 : handshake alert: unrecognized_name: client-side code workaround?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:52 29 4
gpt4 key购买 nike

在检索 XML 数据的自定义 HTTP 客户端中,我收到 unrecognized_name 错误。不幸的是,类似问题的答案对我不起作用:

  • 我无法通过系统属性关闭 SNI 支持,因为我的代码在我无法控制的应用服务器内运行
  • 我无法修复 Web 服务服务器配置(添加服务器名称)

现在,我的代码使用的是 commons httpclient 3.1,但我对替代方案持开放态度。这是我现在使用的删节代码:

HttpClient client = new HttpClient();
PostMethod method = new PostMethod(getEndpointUrl());
NameValuePair[] data = {
new NameValuePair("username", getUsername()),
new NameValuePair("password", getPassword()),
new NameValuePair("email", email)
};
method.setRequestBody(data);
client.executeMethod(method);
return method.getResponseBodyAsStream();

我查看了 HttpClient,似乎我可以实现类似于 https://stackoverflow.com/a/14884941/3676401 中提到的解决方法, 但似乎有很多潜在的安全相关代码。

我不愿意将大量代码转储到一个简单的客户端中。还有其他建议吗?

最佳答案

您正在连接到 SNI 配置错误的服务器。如果您无法控制该服务器并且无法修复它,那么您将不得不禁用 SNI。

1) 如果您希望服务器在某个时候修复,请使用运行时标志暂时禁用 SNI,直到服务器修复。这样您就可以稍后删除此标志,甚至不需要在服务器修复后重新编译。

java -Djsse.enableSNIExtension=false

2) 如果您不希望服务器永远被修复,请实现永久性解决方法,例如在您的应用程序中禁用 SNI:

System.setProperty("jsse.enableSNIExtension", "false");

您链接提到的解决方法最终会以更麻烦的方式禁用 SNI,因此除非您在应用程序的其他地方需要 SNI,否则我只会选择上述选项之一。

关于java - SSL 协议(protocol)异常 : handshake alert: unrecognized_name: client-side code workaround?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870899/

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