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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline MrLebovsky  
#1 Оставлено : 11 июня 2020 г. 13:11:35(UTC)
MrLebovsky

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

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

Для установления соединения с удаленным сервером по https использую пример OkHTTPClientSample.java из документации КриптоПро java-csp-5.0.40363-A

Проблема в том, что соединение происходит по протоколу TLSv1, нужен TLSv1.2
Соответственно, сервер отвечает:
Цитата:
Received fatal alert: protocol_version

При этом, можно установить версию принудительно:
Код:
ConnectionSpec spec = new ConnectionSpec.Builder(
            ConnectionSpec.MODERN_TLS)
            .tlsVersions("TLSv1.2")
            .cipherSuites(cipherSuites)
            .build();


В этом случае, имею ошибку:
Цитата:
No enum constant com.squareup.okhttp.CipherSuite.TLS_CIPHER_2012


Подскажите, каким образом можно решить эту проблему?
Offline Санчир Момолдаев  
#2 Оставлено : 11 июня 2020 г. 13:16:30(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!
попробуйте"GostTLSv1.2"
Техническую поддержку оказываем тут
Наша база знаний
Offline MrLebovsky  
#3 Оставлено : 11 июня 2020 г. 19:12:26(UTC)
MrLebovsky

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

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

Автор: Санчир Момолдаев Перейти к цитате
Добрый день!
попробуйте"GostTLSv1.2"


Пробовал, та же ошибка No enum constant com.squareup.okhttp.CipherSuite.TLS_CIPHER_2012

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

Offline Евгений Афанасьев  
#4 Оставлено : 11 июня 2020 г. 19:17:30(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
В последнем выложенном дистрибутиве в samples есть пример: OkHTTPClientSample
Offline MrLebovsky  
#5 Оставлено : 12 июня 2020 г. 6:30:40(UTC)
MrLebovsky

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

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

Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
В последнем выложенном дистрибутиве в samples есть пример: OkHTTPClientSample


Я же написал, что использую именно этот пример...
Offline Евгений Афанасьев  
#6 Оставлено : 12 июня 2020 г. 8:37:21(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добавление провайдеров
Security.addProvider(new JCP());
Security.addProvider(new CryptoProvider());
Security.addProvider(new RevCheck()); // revocation
Security.addProvider(new Provider()); // tls
в начале кода сделали?
Offline MrLebovsky  
#7 Оставлено : 15 июня 2020 г. 5:08:42(UTC)
MrLebovsky

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

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

Автор: Евгений Афанасьев Перейти к цитате
Добавление провайдеров
Security.addProvider(new JCP());
Security.addProvider(new CryptoProvider());
Security.addProvider(new RevCheck()); // revocation
Security.addProvider(new Provider()); // tls
в начале кода сделали?


нет, не делали, т.к. в примере этого нет.
Если добавить это в начале кода, то ошибка java.security.KeyStoreException: java.io.IOException: Invalid keystore format
Хранилище у нас JKS
Offline MrLebovsky  
#8 Оставлено : 15 июня 2020 г. 6:30:26(UTC)
MrLebovsky

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

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

Так же пробовал делать подобное:

Код:

        SSLSocketFactory factory = TLSContext.initClientSSL(null, "trust.store", "123456", null);

        // Установка нового соединения с заданным адресом.
        HttpsURLConnection connection = (HttpsURLConnection) new URL("https://icrs.nbki.ru/main/").openConnection();

        // Задание для него требуемого SSLSocketFactory.
        connection.setSSLSocketFactory(factory);

        System.out.println("OK");
        // Разрыв соединения.
        connection.disconnect();


Ошибка: java.io.IOException: Неверный формат хранилища
При этом хранилище было создано посредством команды:

Цитата:
keytool -import -alias susan -file certificate.cer -keystore trust.store
Offline MrLebovsky  
#9 Оставлено : 15 июня 2020 г. 6:38:12(UTC)
MrLebovsky

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

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

Так же пробовал это:

Код:

        URL url = new URL("https://icrs.nbki.ru/main/");

        KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
        keyStore.load(null, null);

        KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
        kmf.init(keyStore, "1".toCharArray()); // пароль для подбора контейнера

        KeyStore trustedKeyStore = KeyStore.getInstance("JKS");
        trustedKeyStore.load(new FileInputStream(
            "C:\\connect.jks"),
            "qwerty".toCharArray()
        );

        TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
        tmf.init(trustedKeyStore);

        SSLContext sslContext = SSLContext.getInstance("GostTLS");
        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

        SSLSocketFactory socketFactory = sslContext.getSocketFactory();

        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setSSLSocketFactory(socketFactory); // не HttpsURLConnection.setDefaultSSLSocketFactory!

        connection.connect();
        connection.disconnect();
        System.out.println("OK");


При этом ошибка:
Цитата:
Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

При этом, если смотреть сеть, то видно, что коннект успешно проходит, сервер отправляет hello done, а клиент в ответ "Fatal internal error"

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

Offline Евгений Афанасьев  
#10 Оставлено : 15 июня 2020 г. 8:31:15(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Ошибка 1 с хранилищем - хранилище должно быть формата CertStore, иначе явно укажите тип хранилища JKS.
Ошибка 2 - в хранилище должны быть КОРНЕВЫЕ самоподписанные сертификаты, а не серверный. Должен быть корневой сертификат северной цепочки.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.