Статус: Новичок
Группы: Участники
Зарегистрирован: 19.05.2021(UTC) Сообщений: 1 Откуда: Москва
|
Добрый день! Пилим интеграцию с веб-сервисом НБКИ, по новому стандарту требуется двусторонняя аутентификация. Перелопатил множество тем на этом форуме, победить пока не получается Наше приложение на SpringBoot,хотим ограничиться использованием JCP, без CSP. С стороны НБКИ предоставлены тестовый сертификат .cer, корневой .p7b (УЦ криптопро) и набор ключей .key. По дебагу смотрел - keystore.load(null, null) вычитывает приватные ключи, есть возможность получить X509 сертификат и PrivateKey. Они используются дальше при подписании и шифровании тела запроса, но не ясно как сконфигурить TLS, пока стабильно валится либо javax.net.ssl.SSLHandshakeException: Received fatal alert: HANDSHAKE_FAILURE, либо Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version Пробовал вычитать корневой сертификат (.p7b) кейстором напрямую из файла - падает с Caused by: java.io.IOException: Invalid key store format. Код:
trustStore.load(new FileInputStream("cert/cacertroot.p7b"), null);
В логах так же нашел вот это - WARN ru.CryptoPro.ssl.SSLLogger - %% No appropriate keys for handshake Перепробовал уже самые различные варианты конфигурации, ничего не помогает. Можете проконсультировать? Код:
@Bean
public SSLContext sslContext(CryptoProProperties properties) throws Exception {
System.setProperty("com.sun.security.enableCRLDP", "false");
System.setProperty("ru.CryptoPro.ssl.SSLLogger.level", "ALL");
cpSSLConfig.setDefaultSSLProvider(JCP.PROVIDER_NAME);
HDImageStore.setDir(properties.getKeyStorePath());
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);
keyStore.load(null, null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, properties.getKeyPassword().toCharArray());
var trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(null, null);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
SSLContext sslContext = SSLContext.getInstance("GostTLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
return sslContext;
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. 1. Автор: BlackHawk стабильно валится либо javax.net.ssl.SSLHandshakeException: Received fatal alert: HANDSHAKE_FAILURE, либо Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version
Соберите и приложите полные логи для JTLS (SSLLogger с уровнем ALL). По поводу Received fatal alert: protocol_version - можно попробовать SSLContext.getInstance("GostTLSv.1.2"); вместо GostTLS. 2. Автор: BlackHawk Пробовал вычитать корневой сертификат (.p7b) кейстором напрямую из файла - падает с Caused by: java.io.IOException: Invalid key store format.
Так как это сертификат, а ожидается хранилище заданного формата JCP.CERT_STORE_NAME. Прочитайте сертификат из файла, как X509Certificate, и положите в trustStore: Код:
cert = CertificateFactory.getInstance("X.509").generateCertificates(new FileInputStream("cert/cacertroot.p7b")); // скорее всего, generateCertificates, т.к. p7b
var trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(null, null);
trustStore.setCertificateEntry("root", cert);
3. Автор: BlackHawk В логах так же нашел вот это - WARN ru.CryptoPro.ssl.SSLLogger - %% No appropriate keys for handshake
Не найден ключевой контейнер заданного типа JCP.HD_STORE_NAME с паролем properties.getKeyPassword().toCharArray(). Ключевой контейнер в виде, условно, xxxxxxxx.000 действительно есть в папке properties.getKeyStorePath()? Например, ваш контейнер mykey.000 в папке C:\temp, т.е. properties.getKeyStorePath() при этом C:\temp. Если все верно, то в контейнере есть сертификат? Сертификат не истек? Пароль properties.getKeyPassword() подходит к контейнеру? У приложения есть права на чтение/запись из/в properties.getKeyStorePath()? Отредактировано пользователем 21 мая 2021 г. 23:52:43(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close