Как отключить проверку имени хоста в сертификате сервера при использовании Citrus - PullRequest
0 голосов
/ 27 февраля 2019

Я не могу отключить проверку сертификатов при использовании среды тестирования Citrus для тестирования на сервере.

Я получаю следующую ошибку: org.springframework.web.client.ResourceAccessException: ошибка ввода-вывода при запросе POST для "": сертификат для не соответствует общему имени субъекта сертификата:;вложенное исключение - 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();
    }

Любая идея приветствуется.ТНХ

1 Ответ

0 голосов
/ 27 февраля 2019

Я наконец нашел способ сделать это, посмотрев на исходный код 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;
    }
...