gpt4 book ai didi

java - 禁用主机名验证

转载 作者:行者123 更新时间:2023-12-02 13:29:10 29 4
gpt4 key购买 nike

我们的 Web 应用程序使用 Jersey 客户端 API 在内部调用多个 Web 服务。很少有服务是安全的,我们使用证书进行身份验证。

由于某些原因,我们希望在少数服务上禁用主机名验证。

因此,我搜索了一些示例,找到了以下链接,并且该服务在禁用验证后开始按预期工作。

Link1 , link2 , link3

在浏览第三个链接时,我注意到对 HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 的调用;

我假设,由于上述调用,主机名验证将在所有后续 Web 服务调用中禁用。

如果我的假设正确,如何仅在特定服务上禁用验证?

HostnameVerifier allHostsValid = new HostnameVerifier() { 
public boolean verify(String hostname, SSLSession session) {
if(hostname.equals("xyz")) {
return true;
} else {
// How do I implement this section?
// if I return false will the server perform the verification? If not how do I implement this?
}
}
};

最佳答案

如果您直接使用 HttpsUrlConnection,那么一旦您打开连接(使用 URL.openConnection()),您就可以调用 connection.setHostnameVerifier(allHostsValid) 来为该单个连接设置主机名验证程序。

编辑:

当您使用 Jersey 时,看起来有两个选项,具体取决于您使用的是 Jersey 1 还是 2。

对于 Jersey 2,您可以在创建客户端时在 ClientBuilder 上设置主机名验证程序。

ClientBuilder.newBuilder().hostnameVerifier(allHostsValid).build();

您需要创建两个客户端并根据您要连接的服务使用不同的客户端。然而jersey docs中有一个警告请注意,这仅适用于某些连接器提供商,我不确定您会使用哪个。

这是一个standard API因此它应该适用于任何兼容的 JAX-RS 2.0 客户端(包括 Liberty 的 jaxrsClient-2.0 功能)。

对于 Jersey 1,您似乎可以在客户端或客户端请求上设置属性。

HTTPSProperties httpsProps = new HTTPSProperties(allHostsValid);
client.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, httpsProps);

关于java - 禁用主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43254610/

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