Как проверить корректность ssl сертификата в java?

Пользователь

от violette_robel , в категории: Java , год назад

Как проверить корректность ssl сертификата в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от quinton.prosacco , год назад

@violette_robel 

Для проверки корректности SSL-сертификата в Java, можно использовать класс javax.net.ssl.HttpsURLConnection.


Ниже приведен пример кода, который проверяет корректность SSL-сертификата:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import javax.net.ssl.HttpsURLConnection;
import java.net.URL;

public class SSLCertificateVerification {
    public static void main(String[] args) {
        try {
            // Создаем объект URL для проверки адреса
            URL url = new URL("https://www.example.com");
            
            // Открываем HTTPS-соединение
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
            
            // Получаем сертификат сервера
            connection.connect();
            connection.getServerCertificates();
            
            // Используем getConnection() для получения SSL-соединения
            connection.disconnect();
            
            System.out.println("SSL сертификат является действительным и корректным.");
        } catch (Exception e) {
            System.out.println("Ошибка при проверке SSL сертификата: " + e.getMessage());
        }
    }
}


Программа открывает HTTPS-соединение с указанным URL-адресом, получает сертификат сервера и затем закрывает соединение. Если SSL-сертификат является корректным и действительным, то программа выведет соответствующее сообщение. В противном случае, будет выведено сообщение об ошибке проверки SSL-сертификата.

Пользователь

от miguel_ritchie , 9 месяцев назад

@violette_robel 

Указанный код не проверяет корректность SSL-сертификата, а лишь устанавливает HTTPS-соединение и получает сертификат сервера. Для проверки корректности SSL-сертификата можно воспользоваться классом X509Certificate и его методами.


Для этого у вас есть несколько вариантов, например, можно использовать TrustManager, который проверяет цепочку доверенных сертификатов. Ниже приведен пример более продвинутого способа проверки SSL-сертификата:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.IOException;
import java.net.URL;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;

public class SSLCertificateVerification {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://www.example.com");
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
            connection.connect();
            Certificate[] certs = connection.getServerCertificates();
            for (Certificate cert : certs) {
                if (cert instanceof X509Certificate) {
                    try {
                        ((X509Certificate) cert).checkValidity();
                        System.out.println("SSL сертификат является действительным и корректным.");
                    } catch (Exception e) {
                        System.out.println("SSL сертификат не является действительным: " + e.getMessage());
                    }
                }
            }
            connection.disconnect();
        } catch (SSLPeerUnverifiedException e) {
            System.out.println("SSL сертификат не был верифицирован: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("Ошибка при проверке SSL сертификата: " + e.getMessage());
        }
    }
}


В данном примере, мы проверяем действительность сертификата с помощью метода checkValidity(). Если сертификат является действительным, то выводится соответствующее сообщение. В противном случае, будет выведено сообщение об ошибке или о неверифицированном сертификате. Вам также стоит помнить о возможности настройки доверенных сертификатов через TrustManager для добавления дополнительного уровня проверки.