Установите соединение с сервером HTTPS из Java и проигнорируйте действительность сертификата безопасности - PullRequest
6 голосов
/ 02 мая 2010

Я тестировал систему, которая обращается к группе серверов https с разными ключами, некоторые из которых недействительны, и все они не находятся в локальном хранилище ключей для моей JVM. Я действительно только проверяю что-то, поэтому на данном этапе меня не волнует безопасность. Есть ли хороший способ сделать POST-вызовы на сервер и сказать Java не беспокоиться о сертификатах безопасности?

Мой поиск в Google по этому поводу привел несколько примеров кода, которые заставляют класс выполнять проверку, который всегда работает, но я не могу заставить его подключиться ни к одному из серверов.

Ответы [ 3 ]

6 голосов
/ 02 мая 2010

Согласно комментариям:

С примерами Googled вы имеете в виду среди прочих этот ?


Обновление : ссылка разорвалась, поэтому вот выдержка, которую я сохранил из интернет-архива :

// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }
        public void checkClientTrusted(
            java.security.cert.X509Certificate[] certs, String authType) {
        }
        public void checkServerTrusted(
            java.security.cert.X509Certificate[] certs, String authType) {
        }
    }
};

// Install the all-trusting trust manager
try {
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {

}

// Now you can access an https URL without having the certificate in the truststore
try {
    URL url = new URL("https://hostname/index.html");
} catch (MalformedURLException e) {

}
0 голосов
/ 20 сентября 2018

Добавьте ниже статический код метода в файл класса

static {

    // Create a trust manager that does not validate certificate chains

    try {
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }

            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }
        };

        // Install the all-trusting trust manager
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        // Create all-trusting host name verifier
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };

        // Install the all-trusting host verifier
        HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    } catch (Exception err ){
        log.debug(err.getMessage());;
    }
}
0 голосов
/ 02 мая 2010

Вам необходимо создать X509TrustManager, который обходит все проверки безопасности.В моем ответе на этот вопрос вы можете найти пример:

Как игнорировать ошибки сертификата SSL в Apache HttpClient 4.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...