Как отключить проверку имени хоста в сертификате сервера при использовании Citrus

Я не могу отключить проверку сертификатов при использовании тестовой среды 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();
    }

Любая идея приветствуется. спасибо


person fckbo    schedule 26.02.2019    source источник


Ответы (1)


Наконец-то я нашел способ сделать это, глядя на исходный код 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;
    }
person fckbo    schedule 27.02.2019