Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Ошибка Caused by: java.security.cert.CertificateException: No name matching found при подключении
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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) загружен 31 раз(а).Не знаю в чем проблема - на стаке предложили обходное решение - добавить строчку: Цитата: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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Добрый день. Возможны варианты проверки имени сервера: по cn или alternative name (корректно закодированное ip или имя хоста). Попробуйте включить логирование для JCPLogger с уровнем ALL, как описано в инструкции на портале тех поддержки, в лог будет выведен сертификат в base64, приложите его сюда (лог или только сертификат из лога). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.08.2019(UTC) Сообщений: 65
Сказал(а) «Спасибо»: 4 раз
|
Автор: Евгений Афанасьев Добрый день. Возможны варианты проверки имени сервера: по cn или alternative name (корректно закодированное ip или имя хоста). Попробуйте включить логирование для JCPLogger с уровнем ALL, как описано в инструкции на портале тех поддержки, в лог будет выведен сертификат в base64, приложите его сюда (лог или только сертификат из лога). Здравствуйте! Прикладываю log.txt (37kb) загружен 10 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Версия JCP последняя с сайта? 2.0.40424? Точно ALL уровень у ConsoleHandler и JCPLogger? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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) загружен 22 раз(а).
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.08.2019(UTC) Сообщений: 65
Сказал(а) «Спасибо»: 4 раз
|
Выставил ALL у .level logall.txt (47kb) загружен 13 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Тела серверного сертификата в логах нет, видимо, до построения цепочки не доходит, но серверный сертификат в конце лога отображается, как: Код:
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)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 раз(а).Что это вообще за сертификат и как он туда попал?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
С помощью этой строки вы отключаете проверку хоста и сертификата, происходит попытка построения цепочки, серверный сертификат теперь виден в логе в виде base64, его можно сохранить в файл отдельно, построение падает, т. к. цепочка состоит из одного сертификата, самоподписанного недоверенного (и его нет в trust store). Откуда берётся - надо уточнять у стороны, к которой подключаетесь. Предполагаю, что надо при подключении передавать имя хоста в расширении SNI (server name identification) , но этот функционал пока не поддерживается. Отредактировано пользователем 30 ноября 2019 г. 14:05:53(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Ошибка Caused by: java.security.cert.CertificateException: No name matching found при подключении
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close