Как получить ненадежный SSL-сертификат удаленного сервера с помощью API HTTP-клиента Apache

У меня есть удаленный сервер, который может работать или не работать с использованием действующего сертификата SSL (с использованием самозаверяющего сертификата SSL).

Мы подключаемся к удаленному серверу, которое может не работать, если удаленный сервер использует самозаверяющий сертификат SSL. Итак, мы хотим иметь возможность загружать / просматривать сертификат удаленного сервера, если наше квитирование SSL не удается.

Если я использую HTTP-клиент Apache, я не смог бы найти метод, который позволил бы мне просмотреть сертификат удаленного сервера (вы можете сделать это с помощью HttpsURLConnection, но мы стараемся избегать его использования см. этот пример).

Я также изучил Spring RestTemplate, и он не предоставил никаких вариантов - я искал в Google и не нашел ничего вокруг Spring или HTTP-клиента Apache.


person manish    schedule 26.08.2017    source источник


Ответы (1)


Это должно дать вам практически полный контроль над процессом проверки доверия.

SSLContext sslContext = SSLContextBuilder.create()
        .loadTrustMaterial((chain, authType) -> {
            for (X509Certificate cert: chain) {
                System.out.println(cert.getSubjectDN());
            }
            // Let the standard trust managers decide
            // whether or not the cert chain is trusted
            return false;
        })
        .build();

CloseableHttpClient client = HttpClientBuilder.create()
        .setSSLContext(sslContext)
        .build();
person ok2c    schedule 27.08.2017