Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.09.2022(UTC) Сообщений: 35 Сказал(а) «Спасибо»: 2 раз
|
Евгений, видимо здесь нужен ликбез по сертификатам. На данный момент смог отбросить следующие пункты:
- В ключевом контейнере xxxxxxxx.000 должен быть сертификат (если импортировали из PFX, то сертификата в контейнере может и не быть). Проверить можно в коде с помощью getCertificate(alias) (containsAlias не подходит, т.к. просто проверяет, есть ли такой ключевой контейнер) или в панели JCP на вкладке “Хранилища ключей и сертификатов”, раскрыв нужный ключевой контейнер. – getCertificate(alias) возвращает необходимый сертификат, возможно просмотреть его инфо, в консоли JCP могу развернуть контейнер и увидеть мой сертификат, в каталоге /private/var/opt/cprocsp/keys/username/ лежат папки, соответствующие моим контейнерам в jcp и csp.
- запуск выполняется под пользователем, не имеющим доступа к ключевому контейнеру – System.getProperty("user.name") возвращает моего пользователя
- Контейнер доступен, но истек срок сертификата – срок сертификата не истек. Подтверждается датой истечения сертификата (январь 2023) и возможностью его использования для авторизации в swagger
- не соответствует списку доверенных сертификатов сервера (из CertificateRequest) – полагаю этот пункт тоже не актуален, так как могу авторизоваться в swagger
Что не смог проверить:
- задан неверный пароль password_to_key к ключевому контейнеру – сомневаюсь как должно быть.
Код:keyStore.load(new StoreInputStream(keyAlias), password_to_key);
сюда должен передаваться пароль от сертификата или кейстора? хранилище не запаролено, сертификат был тоже без пароля, но переустановил его с паролем "1" (в надежде, что в этом была проблема)
Код:kmf.init(keyStore, password_to_key);
соответственно пароль передаю и сюда, но не уверен, что это корректно. Пробовал по всякому: и с null, и с пустой строкой в разных комбинациях...
- в сертификате нет политики “клиентская аутентификация” – как это проверить? Я исхожу из того, что раз этот сертификат подходит для авторизации в сваггере, значит он должен подойти и для авторизации через java приложение.
- в ключевой контейнер надо установить всю цепочку сертификатов, а не один сертификат подписи, чтобы соответствовать списку доверенных сертификатов сервера – речь о keyStore? Когда я добавляю корневой сертификат через CSP, он появляется в группе Trusted Root Certification Authorities, что логично. Но не появляется в каталоге /private/var/opt/cprocsp/keys/username/ следовательно при загрузке keyStore не приходится надеяться, что корневой сертификат окажется подгружен. Как здесь правильно действовать? Через JCP я так и не разобрался как добавлять существующие сертификаты. Делаю все через CSP.
- экзотическое - в сертификате имеются неизвестные критические расширения и экзотическое - имеется еще один ГОСТ java-провайдер, который перехватывает декодирование открытого ключа – до этого пока не добрался, оставлю экзотику на потом.
Исходя из вышесказанного на текущий момент мне видится самым логичным проблема либо с паролем, либо с отсутствием корневого сертификата. Также прикладываю логи: Код:Nov 11, 2022 10:10:30 PM ru.CryptoPro.ssl.Provider b
INFO: JCP license isServer: true
Nov 11, 2022 10:10:30 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: Loading JCP 2.0.42119-A
Init key store
Nov 11, 2022 10:10:31 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: JCP has been loaded.
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.cl_41 <init>
INFO: %% adding as private keys %%
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.cl_41 <init>
INFO: %% adding as private keys %%
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.cl_41 <init>
INFO: %% adding as private keys %%
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.cl_41 <init>
INFO: %% adding as private keys %%
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.cl_41 <init>
WARNING: %% No appropriate keys for handshake
PATH: /private/var/opt/cprocsp/keys/username/
Init trusted store
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: SSLContextImpl init.
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: trigger seeding of SecureRandom
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: done seeding SecureRandom
Nov 11, 2022 10:10:31 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: SSLContextImpl initialized.
22:10:31.992 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default
22:10:32.001 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context
22:10:32.002 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection request: [route: {s}->https://esf-test-dmz-webapi.gnivc.ru:443][total available: 0; route allocated: 0 of 2; total allocated: 0 of 20]
22:10:32.014 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {s}->https://esf-test-dmz-webapi.gnivc.ru:443][total available: 0; route allocated: 1 of 2; total allocated: 1 of 20]
22:10:32.015 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Opening connection {s}->https://esf-test-dmz-webapi.gnivc.ru:443
22:10:32.034 [main] DEBUG org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connecting to esf-test-dmz-webapi.gnivc.ru/213.171.46.210:443
22:10:32.034 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Connecting socket to esf-test-dmz-webapi.gnivc.ru/213.171.46.210:443 with timeout 0
22:10:32.124 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Enabled protocols: [TLSv1.2]
22:10:32.125 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Enabled cipher suites:[TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC]
22:10:32.125 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Starting handshake
Nov 11, 2022 10:10:32 PM ru.CryptoPro.ssl.cl_41 a
WARNING: %% No alias is match
Nov 11, 2022 10:10:32 PM ru.CryptoPro.JCSP.Starter <init>
INFO: Loading Java CSP 5.0.42119-A
Nov 11, 2022 10:10:32 PM ru.CryptoPro.JCSP.Starter <init>
INFO: Java CSP has been loaded.
|