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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline rmussalimov  
#1 Оставлено : 28 ноября 2019 г. 20:25:58(UTC)
rmussalimov

Статус: Активный участник

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

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

Установил JCP, создал хранилище сертификатов, поставил 2 нужных серта сервера к которому подключаюсь (ГОСТ TLS)

Инициализирую хранилище следующим образом и пытаюсь обратиться к ресурсу

Цитата:
public static void main(String [] args) throws ClientProtocolException, IOException, NoSuchAlgorithmException
{

System.setProperty("javax.net.ssl.trustStoreType", "HDImageStore");
System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\DNS\\Documents\\myTrustStore.store");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");

URL url = new URL("https://lk.egrz.ru");
InputStream openStream = url.openStream();
openStream.close();

}


Однако, получаю исключение:


Цитата:
WARNING: main, handling exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching lk.egrz.ru found
Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching lk.egrz.ru found
at ru.CryptoPro.ssl.cl_2.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_15.a(Unknown Source)
at ru.CryptoPro.ssl.cl_15.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.u(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.n(Unknown Source)
at ru.CryptoPro.ssl.cl_97.b(Unknown Source)
at ru.CryptoPro.ssl.cl_97.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at ru.lanit.egrz.requestprocessors.Test.main(Test.java:30)
Caused by: java.security.cert.CertificateException: No name matching lk.egrz.ru found
at ru.CryptoPro.ssl.util.cl_10.c(Unknown Source)
at ru.CryptoPro.ssl.util.cl_10.a(Unknown Source)
at ru.CryptoPro.ssl.cl_125.a(Unknown Source)
at ru.CryptoPro.ssl.cl_125.a(Unknown Source)
at ru.CryptoPro.ssl.cl_125.checkServerTrusted(Unknown Source)
... 15 more


Ошибку загуглил - написано, что адрес сервера и CN сертификата должны совпадать

И это действительно так

photo_2019-11-28_22-18-12.jpg (63kb) загружен 29 раз(а).

Не знаю в чем проблема - на стаке предложили обходное решение - добавить строчку:

Цитата:
HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> true);


Но тогда выдает:

Цитата:
WARNING: main, handling exception: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path building failed: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
Exception in thread "main" javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path building failed: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.ssl.cl_2.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_15.a(Unknown Source)
at ru.CryptoPro.ssl.cl_15.a(Unknown Source)
at ru.CryptoPro.ssl.cl_58.u(Unknown Source)
at ru.CryptoPro.ssl.cl_58.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.a(Unknown Source)
at ru.CryptoPro.ssl.cl_97.n(Unknown Source)
at ru.CryptoPro.ssl.cl_97.b(Unknown Source)
at ru.CryptoPro.ssl.cl_97.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at ru.lanit.egrz.requestprocessors.Test.main(Test.java:30)
Caused by: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path building failed: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.ssl.pc_4.cl_2.a(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_2.a(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_4.b(Unknown Source)
at ru.CryptoPro.ssl.cl_125.a(Unknown Source)
at ru.CryptoPro.ssl.cl_125.a(Unknown Source)
at ru.CryptoPro.ssl.cl_125.checkServerTrusted(Unknown Source)
... 15 more
Caused by: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 21 more


Дело точно в сертификатах? Установив данные сертификаты в Windows хранилище (без какого-либо криптопровайдера), могу зайти на сайт через IE. Стоило установить какой-либо криптопродукт, так сразу сертификаты недействительными становятся.

В чем дело?

Сертификаты приложить не могу

Отредактировано пользователем 28 ноября 2019 г. 20:31:20(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 29 ноября 2019 г. 19:52:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добрый день.
Возможны варианты проверки имени сервера: по cn или alternative name (корректно закодированное ip или имя хоста). Попробуйте включить логирование для JCPLogger с уровнем ALL, как описано в инструкции на портале тех поддержки, в лог будет выведен сертификат в base64, приложите его сюда (лог или только сертификат из лога).
Offline rmussalimov  
#3 Оставлено : 29 ноября 2019 г. 21:19:07(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Добрый день.
Возможны варианты проверки имени сервера: по cn или alternative name (корректно закодированное ip или имя хоста). Попробуйте включить логирование для JCPLogger с уровнем ALL, как описано в инструкции на портале тех поддержки, в лог будет выведен сертификат в base64, приложите его сюда (лог или только сертификат из лога).


Здравствуйте!

Прикладываю log.txt (37kb) загружен 7 раз(а).
Offline Евгений Афанасьев  
#4 Оставлено : 29 ноября 2019 г. 21:30:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Версия JCP последняя с сайта? 2.0.40424? Точно ALL уровень у ConsoleHandler и JCPLogger?
Offline rmussalimov  
#5 Оставлено : 29 ноября 2019 г. 22:04:31(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Версия JCP последняя с сайта? 2.0.40424? Точно ALL уровень у ConsoleHandler и JCPLogger?


Версия - jcp-2.0.40035

Да, должно быть ALL

photo_2019-11-30_00-02-18.jpg (97kb) загружен 17 раз(а).
Offline rmussalimov  
#6 Оставлено : 30 ноября 2019 г. 13:00:11(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Выставил ALL у .level

logall.txt (47kb) загружен 11 раз(а).
Offline Евгений Афанасьев  
#7 Оставлено : 30 ноября 2019 г. 13:08:22(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Тела серверного сертификата в логах нет, видимо, до построения цепочки не доходит, но серверный сертификат в конце лога отображается, как:
Код:

FINE: *** Certificate message
chain [0] = [
[
  Version: V1
  Subject: CN=10.167.6.220, OU=Proxy, O=TLS, C=RU <---------- самоподписанный?
  Signature Algorithm: 1.2.643.2.2.3, OID = 1.2.643.2.2.3

  Key:  ru.CryptoPro.JCP.Key.GostPublicKey
  Validity: [From: Sat Dec 09 23:13:33 YEKT 2017,
               To: Mon Jan 08 23:13:33 YEKT 2018]
  Issuer: CN=10.167.6.220, OU=Proxy, O=TLS, C=RU <---------- самоподписанный?
  SerialNumber: [    ecdb2779 301876f9]

]
  Algorithm: [1.2.643.2.2.3]
  Signature:
0000: 7A 99 B3 9F 26 6D B7 B9   CE D4 49 CD DC D7 45 2A  z...&m....I...E*
0010: F1 F5 6C 06 9D BF 13 62   B7 F1 6C 59 B7 87 4A B4  ..l....b..lY..J.
0020: A6 51 23 73 56 CD 2A F8   38 8B 36 CC A7 4F FC 0C  .Q#sV.*.8.6..O..
0030: D7 88 12 BD 68 26 8B F3   9A 88 F3 AF 71 08 F1 A8  ....h&......q...
]

Сертификат небольшой (содержит мало сведений), выглядит, как самоподписанный, CN=10.167.6.220 не совпадает с lk.egrz.ru, подозреваю, что alternative name с lk.egrz.ru нет, оттого и ошибка.
Возможно, нужна поддержка SNI, но ее пока нет в JTLS для передачи имени хоста в SNI.

Отредактировано пользователем 30 ноября 2019 г. 13:10:35(UTC)  | Причина: Не указана

Offline rmussalimov  
#8 Оставлено : 30 ноября 2019 г. 13:18:10(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Тела серверного сертификата в логах нет, видимо, до построения цепочки не доходит, но серверный сертификат в конце лога отображается, как:
Код:

FINE: *** Certificate message
chain [0] = [
[
  Version: V1
  Subject: CN=10.167.6.220, OU=Proxy, O=TLS, C=RU <---------- самоподписанный?
  Signature Algorithm: 1.2.643.2.2.3, OID = 1.2.643.2.2.3

  Key:  ru.CryptoPro.JCP.Key.GostPublicKey
  Validity: [From: Sat Dec 09 23:13:33 YEKT 2017,
               To: Mon Jan 08 23:13:33 YEKT 2018]
  Issuer: CN=10.167.6.220, OU=Proxy, O=TLS, C=RU <---------- самоподписанный?
  SerialNumber: [    ecdb2779 301876f9]

]
  Algorithm: [1.2.643.2.2.3]
  Signature:
0000: 7A 99 B3 9F 26 6D B7 B9   CE D4 49 CD DC D7 45 2A  z...&m....I...E*
0010: F1 F5 6C 06 9D BF 13 62   B7 F1 6C 59 B7 87 4A B4  ..l....b..lY..J.
0020: A6 51 23 73 56 CD 2A F8   38 8B 36 CC A7 4F FC 0C  .Q#sV.*.8.6..O..
0030: D7 88 12 BD 68 26 8B F3   9A 88 F3 AF 71 08 F1 A8  ....h&......q...
]

Сертификат небольшой (содержит мало сведений), выглядит, как самоподписанный, CN=10.167.6.220 не совпадает с lk.egrz.ru, подозреваю, что alternative name с lk.egrz.ru нет, оттого и ошибка.
Возможно, нужна поддержка SNI, но ее пока нет в JTLS для передачи имени хоста в SNI.



С раскомментированной строчкой

Цитата:
HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> true);


Выдает следующее

logalluncommented.txt (52kb) загружен 6 раз(а).

Что это вообще за сертификат и как он туда попал?
Offline Евгений Афанасьев  
#9 Оставлено : 30 ноября 2019 г. 14:03:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
С помощью этой строки вы отключаете проверку хоста и сертификата, происходит попытка построения цепочки, серверный сертификат теперь виден в логе в виде base64, его можно сохранить в файл отдельно, построение падает, т. к. цепочка состоит из одного сертификата, самоподписанного недоверенного (и его нет в trust store).
Откуда берётся - надо уточнять у стороны, к которой подключаетесь.
Предполагаю, что надо при подключении передавать имя хоста в расширении SNI (server name identification) , но этот функционал пока не поддерживается.

Отредактировано пользователем 30 ноября 2019 г. 14:05:53(UTC)  | Причина: Не указана

Offline rmussalimov  
#10 Оставлено : 30 ноября 2019 г. 14:15:34(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
С помощью этой строки вы отключаете проверку хоста и сертификата, происходит попытка построения цепочки, серверный сертификат теперь виден в логе в виде base64, его можно сохранить в файл отдельно, построение падает, т. к. цепочка состоит из одного сертификата, самоподписанного недоверенного (и его нет в trust store).
Откуда берётся - надо уточнять у стороны, к которой подключаетесь.
Предполагаю, что надо при подключении передавать имя хоста в расширении SNI (server name identification) , но этот функционал пока не поддерживается.


То есть со стороны КриптоПро проблем нет? Когда получаем ServerHello, наполовину успех достигнут? Потом принимается сертификат сервера и по идее он должен быть в хранилище клиента? Он вообще какой-то странный, просроченный, а CN (подозреваю, что это IP) вообще из США.

photo_2019-11-30_14-30-01.jpg (23kb) загружен 11 раз(а).

Ипмортировать его в КриптоПро JCP не могу (он вообще косячный, там даже открытый ключ - 0 bits, алгоритмы, хэш - null)

photo_2019-11-30_16-18-14.jpg (53kb) загружен 17 раз(а).

Отредактировано пользователем 30 ноября 2019 г. 14:21:48(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.