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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 4 декабря 2020 г. 11:37:20(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Автор: Алексей Кирковский Перейти к цитате
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Не удается пост роить цепочку для некоего сертификата. Если цепочка не строится для сертификата, который приложен (в составе цепочки), то промежуточный (наравне с сертификатом подписи) вы подаете при подписи? Или хотя бы добавьте его в cacerts, чтобы он оттуда взялся.

Offline Алексей Кирковский  
#12 Оставлено : 4 декабря 2020 г. 12:24:08(UTC)
Алексей Кирковский

Статус: Участник

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

Автор: Евгений Афанасьев Перейти к цитате
Автор: Алексей Кирковский Перейти к цитате
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Не удается пост роить цепочку для некоего сертификата. Если цепочка не строится для сертификата, который приложен (в составе цепочки), то промежуточный (наравне с сертификатом подписи) вы подаете при подписи? Или хотя бы добавьте его в cacerts, чтобы он оттуда взялся.



Я добавил и Тестовый головной и Тестовый промежуточный в cacerts. В ключе есть вся цепочка (там выше код есть). Я проверил, что из PrivateKey считываются все 3 сертификата. Именно дальше построение ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build почему-то падает и не находит путь.
Offline Евгений Афанасьев  
#13 Оставлено : 4 декабря 2020 г. 12:28:17(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Соберите лог, как тут https://support.cryptopr...nlirovnija-kriptopro-jcp
JCPLogger с уровнем ALL
И уровень у ConsoleHandler тоже ALL
Offline Алексей Кирковский  
#14 Оставлено : 4 декабря 2020 г. 12:31:20(UTC)
Алексей Кирковский

Статус: Участник

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

Автор: Евгений Афанасьев Перейти к цитате
Соберите лог, как тут https://support.cryptopr...nlirovnija-kriptopro-jcp
JCPLogger с уровнем ALL
И уровень у ConsoleHandler тоже ALL


Я вверху приложил info.zip. Там внутри файл messages (в конце перед стеком лог JCP). Или там чего-то не хватает ?
Offline Евгений Афанасьев  
#15 Оставлено : 4 декабря 2020 г. 12:36:10(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Добавьте еще -Djava.security.debug=certpath при запуске.
Offline Алексей Кирковский  
#16 Оставлено : 4 декабря 2020 г. 13:00:00(UTC)
Алексей Кирковский

Статус: Участник

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

Автор: Евгений Афанасьев Перейти к цитате
Добавьте еще -Djava.security.debug=certpath при запуске.


Добавил.

messages.zip (254kb) загружен 3 раз(а).
Offline Евгений Афанасьев  
#17 Оставлено : 4 декабря 2020 г. 13:10:20(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Цитата:

Dec 4 10:56:20 Test java: certpath: SunCertPathBuilder.depthFirstSearchForward(): validation failed: java.security.InvalidKeyException: Алгоритм ключа не соответствует алгоритму подписи.

Попробуйте не добавлять самостоятельно BC, без него, для теста. Выглядит так, что он может мешать (дает не тот алгоритм открытого ключа, который ожидает JCP).
Offline Алексей Кирковский  
#18 Оставлено : 4 декабря 2020 г. 14:49:33(UTC)
Алексей Кирковский

Статус: Участник

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

Автор: Евгений Афанасьев Перейти к цитате
Цитата:

Dec 4 10:56:20 Test java: certpath: SunCertPathBuilder.depthFirstSearchForward(): validation failed: java.security.InvalidKeyException: Алгоритм ключа не соответствует алгоритму подписи.

Попробуйте не добавлять самостоятельно BC, без него, для теста. Выглядит так, что он может мешать (дает не тот алгоритм открытого ключа, который ожидает JCP).


Так я сам и не добавляю BC. В провайдеры его добавляет какая-то библиотека на старте. Ее не так легко вычислить (да и после того как вычислю, не очень понятно что потом делать).

Тут более интересная проблема в том, что если я добавляю эти провайдеры в явную в java.security вот в таком порядке :
Цитата:

security.provider.1=SUN
security.provider.2=SunRsaSign
security.provider.3=SunEC
security.provider.4=SunJSSE
security.provider.5=SunJCE
security.provider.6=SunJGSS
security.provider.7=SunSASL
security.provider.8=XMLDSig
security.provider.9=SunPCSC
security.provider.10=JdkLDAP
security.provider.11=JdkSASL
security.provider.12=SunPKCS11
security.provider.13=JCP
security.provider.14=RevCheck
security.provider.15=Crypto
security.provider.16=BC


То получаю вот такую ошибку при обращении, например к HttpClientBuilder. При этом подписание работает, зато перестает работать просто обращение по HTTPS к тому же ЧЗ. То есть похоже JCP подменяет то, что нужно для работы BC.

Цитата:

Dec 4 12:37:34 Test java: FINE: [pool-11-System.interpreter-pausable-daemon-1] check URL: file:/usr/share/jcp-2.0.40450-A/JCP.jar
Dec 4 12:37:34 Test java: дек. 04, 2020 2:37:34 PM ru.CryptoPro.JCP.pref.JCPPref get
Dec 4 12:37:34 Test java: CONFIG: User Preference Node: /ru/CryptoPro/JCP/KeyStore/HDImage.HDImageStore_class_default=/var/opt/cprocsp/keys/${user.name}
Dec 4 12:37:34 Test java: дек. 04, 2020 2:37:34 PM ru.CryptoPro.JCP.KeyStore.JCPKeyStore engineLoad
Dec 4 12:37:34 Test java: FINER: RETURN
Dec 4 12:37:34 Test java: дек. 04, 2020 2:37:34 PM ru.CryptoPro.ssl.SSLContextImpl$DefaultSSLContext l
Dec 4 12:37:34 Test java: INFO: init keymanager of type GostX509
Dec 4 12:37:34 Test java: дек. 04, 2020 2:37:34 PM ru.CryptoPro.ssl.SSLContextImpl$DefaultSSLContext <init>
Dec 4 12:37:34 Test java: WARNING: default context init failed:

Dec 4 12:37:34 Test java: java.security.NoSuchAlgorithmException: GostX509 KeyManagerFactory not available
Dec 4 12:37:34 Test java: at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
Dec 4 12:37:34 Test java: at java.base/javax.net.ssl.KeyManagerFactory.getInstance(KeyManagerFactory.java:148)
Dec 4 12:37:34 Test java: at ru.CryptoPro.ssl.SSLContextImpl$DefaultSSLContext.l(Unknown Source)
Dec 4 12:37:34 Test java: at ru.CryptoPro.ssl.SSLContextImpl$DefaultSSLContext.<init>(Unknown Source)
Dec 4 12:37:34 Test java: at ru.CryptoPro.ssl.SSLContextImpl$DefaultSSLContext.j(Unknown Source)
Dec 4 12:37:34 Test java: at ru.CryptoPro.ssl.SSLSocketFactoryImpl.<init>(Unknown Source)
Dec 4 12:37:34 Test java: at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Dec 4 12:37:34 Test java: at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
Dec 4 12:37:34 Test java: at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
Dec 4 12:37:34 Test java: at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
Dec 4 12:37:34 Test java: at java.base/java.lang.Class.newInstance(Class.java:584)
Dec 4 12:37:34 Test java: at java.base/javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:110)
Dec 4 12:37:34 Test java: at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:973)

Offline Алексей Кирковский  
#19 Оставлено : 4 декабря 2020 г. 15:25:33(UTC)
Алексей Кирковский

Статус: Участник

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

Дальше - еще интереснее.

Когда provider добавляется через код, то возникновение ошибки "Алгоритм ключа не соответствует алгоритму подписи" зависит от того, кто первый вызовется HttpClientBuilder, или проинициализируется JCP.

Если через HttpClientBuilder хоть раз сделать запрос по HTTPS, то JCP больше не будет работать (по ошибке алгоритма подписи). Если проинициализировать провайдеры JCP раньше - то работает.

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

Offline Евгений Афанасьев  
#20 Оставлено : 7 декабря 2020 г. 10:17:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Автор: Алексей Кирковский Перейти к цитате
В провайдеры его добавляет какая-то библиотека на старте

Скорее всего, она добавляет с помощью addProvider, в конец списка. Это нормально.

Автор: Алексей Кирковский Перейти к цитате
java.security.NoSuchAlgorithmException: GostX509 KeyManagerFactory not availabl

Не увидел в коде или java.security, где вы добавляете JTLS (TLS провайдер), например, Security.addProvider(new Provider()); потому алгоритма GostX509 нет.

Автор: Алексей Кирковский Перейти к цитате
То есть похоже JCP подменяет то, что нужно для работы BC.

Я писал выше, что и JCP, и BC реализуют работу с открытыми ГОСТ ключами. Тот провайдер, что выше в списке, и будет перехватывать и декодировать (если умеет) открытые ключи (по OID алгоритма), потому что java по умолчанию не использует имя провайдера (да и не знает) для четкого указания, кто должен декодировать незнакомый ей ключ (в сертификате). Использовать одновременно несколько провайдеров, одинаково реализующих работу с открытым ключом, нужно осторожно, так как провайдеры могут мешать друг другу.

Автор: Алексей Кирковский Перейти к цитате
возникновение ошибки "Алгоритм ключа не соответствует алгоритму подписи" зависит от того, кто первый вызовется HttpClientBuilder, или проинициализируется JCP.

Это странно, разве что обращение к HttpClientBuilder перезагружает провайдеры, но из java.security они обычно загружаются в том порядке, как они там указаны (у них есть номера).

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

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