gpt4 book ai didi

java - 使用 Citrus 时如何禁用服务器证书中的主机名验证

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

使用 Citrus 测试框架对服务器进行测试时,我无法禁用证书检查。

我收到以下错误:org.springframework.web.client.ResourceAccessException:“”的 POST 请求出现 I/O 错误:证书与证书主体的通用名称不匹配:;嵌套异常是 javax.net.ssl.SSLException。

以下是用于在 Citrus 中创建端点的代码片段:

   @Bean
public HttpClient myClientSSL() throws Exception{
return CitrusEndpoints.http()
.client()
.requestUrl("https://w.x.y.z:port")
.requestFactory(mySSLBasicAuthRequestFactory())
.build();
}

@Bean
public BasicAuthClientHttpRequestFactory mySSLBasicAuthRequestFactoryBean() {
BasicAuthClientHttpRequestFactory requestFactory = new BasicAuthClientHttpRequestFactory();

AuthScope authScope = new AuthScope(bpmServer, Integer.parseInt(bpmPort), "", "basic");
requestFactory.setAuthScope(authScope);

UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, password);
requestFactory.setCredentials(credentials);
return requestFactory;
}

@Bean
public HttpComponentsClientHttpRequestFactory mySSLBasicAuthRequestFactory() throws Exception {
return mySSLBasicAuthRequestFactoryBean().getObject();
}

欢迎任何想法。谢谢

最佳答案

我终于找到了一种方法来查看 Citrus 源代码,这是我想出的让它工作的方法,只是将它放在这里以防对其他人有帮助:

    @Bean
public HttpComponentsClientHttpRequestFactory mySSLBasicAuthRequestFactory() throws Exception {

AuthScope authScope = new AuthScope(myServer, myPort, "", "basic");
HttpComponentsClientHttpRequestFactory myHttpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory() {
@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
// we have to use preemptive authentication
// therefore add some basic auth cache to the local context
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();

// authCache.put(new HttpHost(authScope.getHost(), authScope.getPort(), "http"), basicAuth);
authCache.put(new HttpHost(authScope.getHost(), authScope.getPort(), "https"), basicAuth);

BasicHttpContext localcontext = new BasicHttpContext();
localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);

return localcontext;
}
};

UsernamePasswordCredentials myCredentials = new UsernamePasswordCredentials(myUser, myPassword);
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, myCredentials);

CloseableHttpClient myHttpClient = HttpClients.custom()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setDefaultCredentialsProvider(provider)
.setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, (x509Certificates, s) -> true)
.build())
.build();

myHttpComponentsClientHttpRequestFactory.setHttpClient(myHttpClient);
return myHttpComponentsClientHttpRequestFactory;
}

关于java - 使用 Citrus 时如何禁用服务器证书中的主机名验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54894234/

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