Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline 4an8fdu63aiqsrp  
#1 Оставлено : 26 августа 2022 г. 13:56:04(UTC)
4an8fdu63aiqsrp

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.08.2022(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Есть следующий код для установки соединения с последующей двухсторонней TLS аутентификации:
Код:

    private SSLContext getContext() throws Exception {
        Security.addProvider(new JCP());
        Security.addProvider(new RevCheck()); // RevCheck
        Security.addProvider(new CryptoProvider()); // JCryptoP
        Security.addProvider(new Provider()); // провайдер JTLS
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

        KeyStore trustStore = KeyStore.getInstance("JKS");
        trustStore.load(new FileInputStream(TRUST_STORE_PATH), "changeit".toCharArray()); // хранилище корневых сертификатов

        KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
        KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
        keyStore.load(null, null);
        kmf.init(keyStore, PASSWORD); // Пароль к контейнеру сервера или клиента

        TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
        tmf.init(trustStore);
        SSLContext sslCtx = SSLContext.getInstance("GostTLS"); // Защищенный контекст
        sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        return sslCtx;
    }


Он рабочий, но не подходит под мои требования. Дело в том, что машина, на которой будет запускаться этот код, не будет иметь доступ в интернет, соответственно не будет работать получение списка отозванных сертификатов.
Я внимательно изучил руководство программиста по JTLS, но нигде не нашёл, как настроить оффлайн проверку списка по локальному crl файлу.
При установке флагов "com.sun.security.enableCRLDP" и "com.ibm.security.enableCRLDP" в false, я получаю следующую ошибку:
Код:

Caused by: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_9.cl_5: PKIX path validation failed: java.security.GeneralSecurityException: Online certificate verification is enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm), and offline certificate verification is disabled, and ManagerFactoryParameters are null.
	at ru.CryptoPro.ssl.cl_3.a(Unknown Source)
	at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_64.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_64.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_18.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_18.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_64.u(Unknown Source)
	at ru.CryptoPro.ssl.cl_64.a(Unknown Source)
	at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
	at ru.CryptoPro.ssl.SSLSocketImpl.o(Unknown Source)
	at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source)
	at ru.CryptoPro.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:580)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1665)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
	at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:529)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
	at feign.Client$Default.convertResponse(Client.java:109)
	at feign.Client$Default.execute(Client.java:105)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:119)
	... 73 more
Caused by: ru.CryptoPro.ssl.pc_9.cl_5: PKIX path validation failed: java.security.GeneralSecurityException: Online certificate verification is enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm), and offline certificate verification is disabled, and ManagerFactoryParameters are null.
	at ru.CryptoPro.ssl.pc_9.cl_2.a(Unknown Source)
	at ru.CryptoPro.ssl.pc_9.cl_2.a(Unknown Source)
	at ru.CryptoPro.ssl.pc_9.cl_4.b(Unknown Source)
	at ru.CryptoPro.ssl.cl_120.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_120.a(Unknown Source)
	at ru.CryptoPro.ssl.cl_120.checkServerTrusted(Unknown Source)
	... 90 more
Caused by: java.security.GeneralSecurityException: Online certificate verification is enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm), and offline certificate verification is disabled, and ManagerFactoryParameters are null.
	... 96 more


Буду благодарен любой помощи.
Заранее спасибо!
Offline Евгений Афанасьев  
#2 Оставлено : 26 августа 2022 г. 16:15:20(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,963
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Добрый день.
Если требуется проверка по CRL оффлайн, то можно, как в исключении, использовать ManagerFactoryParameters: "...and ManagerFactoryParameters are null".
Пример:
Код:

...
KeyStore trustStore = ... // хранилище доверенных корневых сертификатов
X509CRL crl = ... // имеющийся CRL
PKIXParameters pkixParams = new PKIXBuilderParameters(trustStore, new X509CertSelector());
pkixParams.setRevocationEnabled(true);
List<CertStore> certStores = new ArrayList<>(1);
Collection<CRL> cRLs = new HashSet<>(2);
cRLs.add(crl);
certStores.add(CertStore.getInstance("Collection", new CollectionCertStoreParameters(cRLs)));
pkixParams.setCertStores(certStores);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(...);
tmf.init(new CertPathTrustManagerParameters(pkixParams)); // <--- !
SSLContext context = SSLContext.getInstance(...);
context.init(...);
...
thanks 2 пользователей поблагодарили Евгений Афанасьев за этот пост.
Санчир Момолдаев оставлено 26.08.2022(UTC), 4an8fdu63aiqsrp оставлено 29.08.2022(UTC)
Offline 4an8fdu63aiqsrp  
#3 Оставлено : 29 августа 2022 г. 12:04:12(UTC)
4an8fdu63aiqsrp

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.08.2022(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Добрый день.
Если требуется проверка по CRL оффлайн, то можно, как в исключении, использовать ManagerFactoryParameters: "...and ManagerFactoryParameters are null".
Пример:
Код:

...
KeyStore trustStore = ... // хранилище доверенных корневых сертификатов
X509CRL crl = ... // имеющийся CRL
PKIXParameters pkixParams = new PKIXBuilderParameters(trustStore, new X509CertSelector());
pkixParams.setRevocationEnabled(true);
List<CertStore> certStores = new ArrayList<>(1);
Collection<CRL> cRLs = new HashSet<>(2);
cRLs.add(crl);
certStores.add(CertStore.getInstance("Collection", new CollectionCertStoreParameters(cRLs)));
pkixParams.setCertStores(certStores);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(...);
tmf.init(new CertPathTrustManagerParameters(pkixParams)); // <--- !
SSLContext context = SSLContext.getInstance(...);
context.init(...);
...


Спасибо! Всё получилось
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.