当前位置: 首页 > 知识库问答 >
问题:

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

东方华晖
2023-03-14

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

我得到以下错误:org.springframework.web.client.resourceAccessException:“”的POST请求上的I/O错误:证书与证书主题的公共名称不匹配:;嵌套异常是javax.net.ssl.SSLException。

下面是用于在Citrus中创建endpoint的代码片段:

   @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();
    }

任何想法都欢迎。THX

共有1个答案

锺高翰
2023-03-14

通过查看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;
    }
 类似资料:
  • 我必须使用证书调用服务器API,所以我已经将cer文件导入到密钥库中并完成编码,但仍然得到了javax.net.ssl.SSLHandShakeException:Sun.Security.Validator.ValidatoreXception:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目

  • 问题内容: 简介: 有没有一种方法可以强制PHP中的内置SoapClient-class通过HTTPS连接到具有无效证书的服务器? 我为什么要这样做? 我已经在没有DNS条目或证书的服务器上部署了新应用程序。我想 在 设置DNS条目和修复证书 之前 尝试使用SoapClient连接到它,而最合理的方法似乎是使客户端在测试过程中忽略证书。 我是否没有意识到这是巨大的安全风险? 这仅用于测试。服务投入

  • 问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我

  • 使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。

  • 我在进行服务器端渲染时遇到以下错误。 注意:-我正在使用反应、redux、apollo-Client(GraphQL)和ExpressJS(NodeJS)。我向其发出请求的API服务器位于另一个域上,我无法对此进行任何更改。 在使用客户端渲染时,我没有遇到任何困难,一切都正常工作,但在使用服务器端渲染时,我遇到了上述错误。 所以我在服务器上尝试了以下方法,但仍然没有运气。 > 添加自签名证书 添加

  • 问题内容: 我正在尝试连接到HTTPS URL,但是我需要使用客户端身份验证以及第三方软件在我的系统上放置的证书。 我丝毫不知道如何找到或使用它,我所要做的只是C#示例代码,这与我为此找到的所有Java答案都大不相同。(例如,KeyStore显然需要某种密码吗?) 这是我拥有的C#示例代码 然后,它仅遍历WS2_store_Certs CertificateCollection并一路检查它们。再进