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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline HelenKlimova  
#1 Оставлено : 16 декабря 2019 г. 10:35:49(UTC)
HelenKlimova

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Добрый день!

Мы используем сертифицированную версию Крипто-про JCP 2.0.39014 и JTLS 2.0.
Недавно нам от партнера пришло сообщение, что с февраля 2020 года "при передаче через Интернет (конфигурация протокола HTTPS) начнет использоваться TLS версии 1.2." И рекомендации по тестированию, куда зайти и что посмотреть.
Мы попробовали обратиться к их тестовому серверу, используя стандартное установление ssl-соединения
Код:

SSLContext ctx =SSLContext.getInstance("GostTLS");
TrustManagerFactory tmf =TrustManagerFactory.getInstance("GostX509");
...
ctx.init(null, tmf.getTrustManagers(),null);

И нам возвращается ошибка

Caused by: javax.net.ssl.SSLException: Received fatal alert: PROTOCOL_VERSION
at ru.CryptoPro.ssl.C.a(Unknown Source)
at ru.CryptoPro.ssl.C.a(Unknown Source)
at ru.CryptoPro.ssl.am.b(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.i(Unknown Source)
at ru.CryptoPro.ssl.am.startHandshake(Unknown Source)

С текущими боевыми серверами все работает корректно.
Почитали доки и не нашли, где можно каким-то образом указать версию TLS.
Можно нам подсказать, есть ли возможность где-то указать в коде или настроить используемую версию TLS?
Offline two_oceans  
#2 Оставлено : 16 декабря 2019 г. 10:45:21(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Насчет Джавы могу ошибаться, но я бы попробовал указать что-то вроде "GostTLSv1.2" или "GostTLSv12".
Offline Евгений Афанасьев  
#3 Оставлено : 16 декабря 2019 г. 11:50:55(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Добрый день.
Добавлю, что нужно обновить версию jcp, а все константы для выбора алгоритма указаны в рук-ве разработчика jtls.
Offline HelenKlimova  
#4 Оставлено : 16 декабря 2019 г. 11:59:40(UTC)
HelenKlimova

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Автор: Евгений Афанасьев Перейти к цитате
Добавлю, что нужно обновить версию jcp, а все константы для выбора алгоритма указаны в рук-ве разработчика jtls.

Хорошо, спасибо.
В какой версии jcp 2.0 есть такая возможность?

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

Offline Евгений Афанасьев  
#5 Оставлено : 16 декабря 2019 г. 12:07:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Если искать по слову tls в changelog, то можно найти первое упоминание:
2017-06-28 КриптоПро JCP 2.0.39267
* tls: рефакторинг, добавлена поддержка ГОСТ TLS v. 1.1, 1.2, удалены сайфер-сюиты SSL3_CK_GVO_KB2, SSL3_CK_GVO (JCP-386)
Последние версии (2.0.40XXX) на сайте сертифицированы. Есть версия для java 10+.
После обновления спустя 3 года (39014 был 2016-10-04) не исключены "сюрпризы" (были введены различные ограничения в виде отключаемых предупреждений, например, может потребоваться передать -Dtls_prohibit_disabled_validation=false для java и т.п., все изменения в changelog для тэга tls).

Значимые изменения:
Код:

* tls: добавлена проверка отключения проверки сертификата другой стороны в SSLContext, которую можно отключить -Dtls_prohibit_disabled_validation=false (JCP-1256)
* tls: удалена фильтрация сертификатов по алгоритму ключа из CertificateRequest для клиента (JCP-1211, JCP-1215)
* tls: на закладке "Настройки сервера" удалена возможность отключить передачу RI клиентом (JCP-1081)
* tls: удалено явное определение ГОСТового провайдера подписи в параметрах при построении цепочки сертификатов другой стороны (JCP-1003)
* tls: устранена ошибка bad handshake record mac (JCP-692)
* tls: рефакторинг, добавлена поддержка ГОСТ TLS v. 1.1, 1.2, удалены сайфер-сюиты SSL3_CK_GVO_KB2, SSL3_CK_GVO (JCP-386)
* tls: хранение и редактирование настроек JTLS только под управлением учетной записи администратора (JCP-713)

Отредактировано пользователем 16 декабря 2019 г. 12:11:41(UTC)  | Причина: Не указана

Offline HelenKlimova  
#6 Оставлено : 16 декабря 2019 г. 13:12:55(UTC)
HelenKlimova

Статус: Активный участник

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

Сказал(а) «Спасибо»: 5 раз
Автор: Евгений Афанасьев Перейти к цитате
все константы для выбора алгоритма указаны в рук-ве разработчика jtls.

Скачали новую версию, 40502, сидим, читаем доки. В руководстве разработчика jtls видим текст:

Из SSLContext далее можно получить SSLSocketFactory и создавать сокеты.
Поддерживаемые протоколы: GostTLS – соответствует TLS v. 1.0.

Но про другие протоколы ни слова. Почитали документ, поиском поискали, ничего нету про TLS 1.2. В примерах тоже не нашли. Везде только GostTLS. Можно подсказать хоть примерно, где описаны константы?
Offline Евгений Афанасьев  
#7 Оставлено : 16 декабря 2019 г. 13:30:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Автор: HelenKlimova Перейти к цитате
Автор: Евгений Афанасьев Перейти к цитате
все константы для выбора алгоритма указаны в рук-ве разработчика jtls.

Скачали новую версию, 40502, сидим, читаем доки. В руководстве разработчика jtls видим текст:

Из SSLContext далее можно получить SSLSocketFactory и создавать сокеты.
Поддерживаемые протоколы: GostTLS – соответствует TLS v. 1.0.

Но про другие протоколы ни слова. Почитали документ, поиском поискали, ничего нету про TLS 1.2. В примерах тоже не нашли. Везде только GostTLS. Можно подсказать хоть примерно, где описаны константы?

Проверил, действительно, нет упоминаний. Скорее всего, по каким-то причинам были удалены.
Алгоритмы есть в классе ru.CryptoPro.ssl.Provider:
Код:

    public static final String ALGORITHM = "GostTLS";
    public static final String ALGORITHM_11 = "GostTLSv1.1";
    public static final String ALGORITHM_12 = "GostTLSv1.2";

Также можно использовать "TLSv1", "TLSv1.1", "TLSv1.2" в сочетании с именем провайдера "JTLS".

Отредактировано пользователем 16 декабря 2019 г. 13:31:38(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
HelenKlimova оставлено 16.12.2019(UTC)
Offline gusev.a.c@gmail.com  
#8 Оставлено : 23 декабря 2019 г. 16:53:22(UTC)
gusev.a.c@gmail.com

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

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

Добрый день

java version "1.8.0_231"
версия криптопро rel.2.0.40502

настройки tls

[img]https://pastenow.ru/63c1173501e42a3ba39a7702f5fd7ee7[/img]

при запуске

Цитата:

public static void main(String[] args) throws NoSuchAlgorithmException {
SSLContext sslContext = SSLContext.getDefault();
System.out.println(sslContext.getSocketFactory());
}


исключение
Цитата:
Caused by: java.security.KeyManagementException: Certificate validation is disabled but required. The check can be turned off using -Dtls_prohibit_disabled_validation=false or SetPrefs (see the programmer's guide) or TLSSettings.


при использовании системной настройки -Dtls_prohibit_disabled_validation=false все ок.
но при попытке задать настройку через SetPrefs - та же ошибка

поиск по форуму предлагает варианты задания настройки
Цитата:
java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl/util -key tls_prohibit_disabled_validation -value false

данный вариант не срабатывает...

в ходе отладки было определено, что поиск производится в узле System Preference Node: /ru/CryptoPro/ssl, а не в ru/CryptoPro/ssl/util

так же было обнаружено, что реализация метода для этой настройки выглядит следующим образом
Цитата:

public static boolean getTlsProhibitDisabledValidation() {
boolean var0 = GetProperty.getBooleanProperty("tls_prohibit_disabled_validation", true);
boolean var1 = a.getBoolean("tls_prohibit_disabled_validation", var0);
return var0 || var1;
}

т.е. если мы хотим задать значение false через SetPrefs, то false мы никогда не получим

Подскажите, пожалуйста, в чем тут проблема?
Offline gusev.a.c@gmail.com  
#9 Оставлено : 23 декабря 2019 г. 16:55:59(UTC)
gusev.a.c@gmail.com

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

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

Так же еще есть вопрос, почему после установки JCP провайдер становится дефолтным в системе, т.е. SSLContext.getDefault() возвращает инстанс JCP, это поведение как то можно поменять?
Offline Евгений Афанасьев  
#10 Оставлено : 23 декабря 2019 г. 17:46:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.
Автор: gusev.a.c@gmail.com Перейти к цитате

Подскажите, пожалуйста, в чем тут проблема?

Выглядит, как ошибка, спасибо, исправим в следующей сборке.
Автор: gusev.a.c@gmail.com Перейти к цитате

почему после установки JCP провайдер становится дефолтным в системе, т.е. SSLContext.getDefault() возвращает инстанс JCP, это поведение как то можно поменять?

Поведение можно поменять, если вернуть часть настроек в java.security, как было:
ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=PKIX
и убрать
ssl.SocketFactory.provider=ru.CryptoPro.ssl.SSLSocketFactoryImpl
ssl.ServerSocketFactory.provider=ru.CryptoPro.ssl.SSLServerSocketFactoryImpl
Это, кстати, можно сделать и программно, с помощью Security.setProperty().
Эти настройки добавляются, т.к. не все реализации http client используют SSLContext, куда можно явно передать алгоритмы, а обращаются к дефолтным параметрам (тем, что в java.security и которые могут быть не-ГОСТ).

Отредактировано пользователем 23 декабря 2019 г. 17:47:18(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Санчир Момолдаев оставлено 23.12.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.