Статус: Новичок
Группы: Участники
Зарегистрирован: 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
Буду благодарен любой помощи. Заранее спасибо!
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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(...);
...
|
|
2 пользователей поблагодарили Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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(...);
...
Спасибо! Всё получилось
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close