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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Andrey_V_Pestov  
#1 Оставлено : 19 мая 2020 г. 18:24:01(UTC)
Andrey_V_Pestov

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Добрый день.
Получаю ошибку javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure при попытке получения маркера доступа после получения авторизационного кода.
Код получения запроса токена
Код:
System.setProperty("ru.CryptoPro.defaultSSLProv", JCSP.PROVIDER_NAME);
        System.setProperty("javax.net.ssl.trustStoreProvider", JCSP.PROVIDER_NAME);
        System.setProperty("javax.net.ssl.keyStoreType", JCSP.HD_STORE_NAME);
        System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
        System.setProperty("javax.net.ssl.trustStoreType", JCSP.HD_STORE_NAME);
        System.setProperty("javax.net.ssl.trustStore",
                "C:\\trust\\trust.store");
        System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

          try {
            SSLSocketFactory factory = TLSContext.initClientSSL(null,
                    "C:\\trust\\trust.store", KEYSTORE_PASSWORD, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(factory);
        } catch (Exception e) {
            e.printStackTrace();
        }


        String timestamp = getTimestamp();
        OAuthClientRequest oAuthClientRequest = OAuthClientRequest.tokenLocation("https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te")
                .setClientId(OPTIONS_CLIENT_ID)
                .setCode(optionsCode)
                .setGrantType(grantType)
                .setClientSecret(generateClientSecret(scope, timestamp))
                .setParameter("state", optionsState)
                .setRedirectURI(URI_REDIRECT)
                .setScope(scope)
                .setParameter("timestamp", timestamp)
                .setParameter("token_type", "Bearer")
                .setParameter("access_type", OPTIONS_ACCESS_TYPE_OFFLINE)
                .buildBodyMessage();
        OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
        return oAuthClient.accessToken(oAuthClientRequest, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class);

Код формирования подписи:
Код:

   private byte[] sign(String str) throws Exception {
        KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME,
                JCSP.PROVIDER_NAME);
        keyStore.load(null, null);

        PrivateKey key = (PrivateKey) keyStore.getKey(KEY_ALIAS, KEYSTORE_PASSWORD.toCharArray());
        Signature signature = Signature.getInstance(JCP.GOST_SIGN_2012_512_NAME);
        signature.initSign(key);
        byte[] data = str.getBytes();
        signature.update(data);
        X509Certificate certificate = (X509Certificate) keyStore.getCertificate(KEY_ALIAS);
        return CMSSign.createHashCMSEx(data, false, new PrivateKey[]{key}, new Certificate[]{certificate}, null,
                true, false, CMStools.DIGEST_OID_2012_512, CMStools.SIGN_OID_2012_512,
                CMStools.DIGEST_ALG_NAME_2012_512, JCP.GOST_SIGN_2012_512_NAME, JCSP.PROVIDER_NAME);
    }


Хранилище сертификатов:
UserPostedImage
Информация о ключе:
UserPostedImage

Кто-нибудь может подсказать, что делать в такой ситуации или что я делаю не так?

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

Offline Санчир Момолдаев  
#2 Оставлено : 28 мая 2020 г. 9:28:25(UTC)
Санчир Момолдаев

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

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,173
Российская Федерация

Сказал(а) «Спасибо»: 94 раз
Поблагодарили: 263 раз в 246 постах
Добрый день!
Соберите логи

https://support.cryptopr...nlirovnija-kriptopro-jcp

https://support.cryptopr...lirovnija-kriptopro-jtls

Установите SSLLogger уровня ALL

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

Техническую поддержку оказываем тут
Наша база знаний
Offline Andrey_V_Pestov  
#3 Оставлено : 28 мая 2020 г. 12:36:48(UTC)
Andrey_V_Pestov

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Прикладываю логи
esia.log (12kb) загружен 6 раз(а).
Offline Евгений Афанасьев  
#4 Оставлено : 28 мая 2020 г. 13:57:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 703 раз в 664 постах
Здравствуйте.
Лог, возможно, настроен не до конца или не верно - мало данных.
Предлагаемые шаги:
1)
Код:

System.setProperty("javax.net.ssl.trustStoreProvider", JCSP.PROVIDER_NAME); <--
System.setProperty("javax.net.ssl.keyStoreType", JCSP.HD_STORE_NAME);
System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
System.setProperty("javax.net.ssl.trustStoreType", JCSP.HD_STORE_NAME); <--
System.setProperty("javax.net.ssl.trustStore", "C:\\trust\\trust.store");
System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

trustStoreProvider со значением JCSP.PROVIDER_NAME рекомендуем изменить на JCP.PROVIDER_NAME
trustStoreType со значением JCSP.HD_STORE_NAME рекомендуем изменить на JCP.CERT_STORE_NAME (исходим из предположения, что trust.store имеет тип CertStore).
2)
использовать новую сборку https://www.cryptopro.ru...p/java-csp-5.0.40714.zip если используете java 7-8, Java CSP требует установки в java.
Или (рекомендовано!) использовать новую сборку https://www.cryptopro.ru...java-csp-5.0.40621-A.zip если используете java 10+, Java CSP НЕ требует установки в java, но есть особенности:
2.1) нужно добавить провайдеры программно (см. рук-во разработчика и администратора безопасности):
Security.addProvider(new JCSP()); // он первый, т.к. вы используете JCSP в коде
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
Security.addProvider(new Provider()); // это JTLS-провайдер
2.2) лицензия в ходе использования будет установлена и читаться под тем пользователем, под которым работает приложение (в случае версии Java CSP 5.0 для java 7-8 лицензия ставилась под администратором).
Обновление рекомендовано, т.к. были исправления для Spring.

Отредактировано пользователем 29 мая 2020 г. 9:27:08(UTC)  | Причина: Не указана

Offline Andrey_V_Pestov  
#5 Оставлено : 29 мая 2020 г. 13:54:22(UTC)
Andrey_V_Pestov

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

logs2.log (75kb) загружен 4 раз(а).
1. Заменил
2. Использую новую сборку. JDK14
3. Провайдеры добавил
Offline Евгений Афанасьев  
#6 Оставлено : 29 мая 2020 г. 17:15:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 703 раз в 664 постах
Судя по тому, что соединение отвалилось сразу после client hello, сервер (адрес/порт) не поддерживает ГОСТ.
Offline Andrey_V_Pestov  
#7 Оставлено : 29 мая 2020 г. 17:25:38(UTC)
Andrey_V_Pestov

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

И что надо делать?
Offline Евгений Афанасьев  
#8 Оставлено : 29 мая 2020 г. 18:00:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 703 раз в 664 постах
Переход по ссылке https://esia-portal1.test.gosuslugi.ru/ в IE показал сертификат сервера с ключом RSA, запрос csptest к https://esia-portal1.tes...suslugi.ru/aas/oauth2/te без -proto и с -proto 6 (TLS v. 1.2) тоже дал иностранные cipher suite.
Уточните у администратора сервера, как и куда подключиться (хост, порт, TLS протокол), чтобы использовать ГОСТ.

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

Offline Andrey_V_Pestov  
#9 Оставлено : 29 мая 2020 г. 18:09:05(UTC)
Andrey_V_Pestov

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Евгений, я правильно понимаю, что ЕСИА-ТЕСТ не умеет в ГОСТ?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.