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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Marat77  
#1 Оставлено : 23 августа 2019 г. 15:23:24(UTC)
Marat77

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

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

Сказал(а) «Спасибо»: 1 раз
День добрый!
Задача параллельно получать ресурсы с ресурсов, с использованием ГОСТ-алгоритмов и "традиционных".

Для работы с внешними ресурсами установил CryptoPro CSP + скачал и установил сертификаты http://cpca20.cryptopro.ru/cacer.p7b (они встали в доверенные корневые центры сертификации). Контрольный IE благополучно открывает (например - https://icrs.nbki.ru/main/ у которого сертификат выданный УЦ Крипто-Про (Гост 2012)).

Использую JDK8, Установил JCP -> Запускаю JCPControlPanel->Хранилище ключей и сертификатов->Хранилище сертификатов->Создаю новое хранилище->Добавляю в него скачанный с http://cpca20.cryptopro.ru/cacer.p7b и получаю цепочку из 5 сертификатов (УЦ КРИПТО-ПРО с разными алгоритмами подписи). Использую немного модернизированный пример из JTLS_Samples:

Код:
String trustStorePath = "C:/s/2/storage.store";
String trustStorePassword = "11112222";
String urlPath = "https://icrs.nbki.ru/main/";//"https://www.google.com";
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

SSLSocketFactory factory = TLSContext.initClientSSL(null, trustStorePath, trustStorePassword, null);

URL url = new URL(urlPath);
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(factory);

BufferedReader br = new BufferedReader(new InputStreamReader( connection.getInputStream(), "windows-1251"));
String input;
while ((input = br.readLine()) != null)
	System.out.println(input);
br.close();
connection.disconnect();


https://icrs.nbki.ru/main/ открывается, но даже добавив в тоже хранилище сертификаты GlobalSignRootCA-R2 (или всю цепочку непосредственно, например до google.com) - открыть https://www.google.com не получается, ошибка javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure:



"Прямое" использованиев виде
Код:
URL url = new URL("https://www.google.com/");
 HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

Которое до установки JCP корректно выполнялось, вызывает ту же ошибку.

Что необходимо дополнительно инициализировать для переключения между подобными разными запросами (KeyManager?)?
Есть ли пример с инициализацией всех необходимых составляющих для https соединений?
Заранее спасибо.
Offline Санчир Момолдаев  
#2 Оставлено : 24 августа 2019 г. 15:48:43(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!
пример для гост-тлс через HttpsURLConnection есть в п.3.3 "Использование «КриптоПро JTLS» версия 2.0 R3 в
HttpsURLConnection" "ЖТЯИ.00091-03 33 03-02. Руководство программиста (JTLS)"
для подключения не по госту можно использовать тот же пример за исключением следующих деталей

TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX")
и
SSLContext sslCtx = SSLContext.getInstance("TLSv1.2");

connection.getCipherSuite()возвращет
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
для "https://www.cryptopro.ru"

TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
для "https://www.google.ru"

p.s. правда это я проверил в jvm12 jcp-2.0.40450-A
p.s.2 тот же код скомпилил на jvm8 jcp-2.0.40424 работает.

Отредактировано пользователем 24 августа 2019 г. 16:10:14(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Marat77 оставлено 26.08.2019(UTC)
Offline Marat77  
#3 Оставлено : 26 августа 2019 г. 12:12:15(UTC)
Marat77

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

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

Сказал(а) «Спасибо»: 1 раз
Санчир, спасибо Вам за ответ, скачал документацию из указанной версии.

Получилось следующим образом (тест):
Код:
    private static void readRemote(SSLSocketFactory factory, URL url) throws IOException {
        System.out.println("URL:" + url.getPath());
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setSSLSocketFactory(factory);

        try(BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "windows-1251"))) {
            String input;
            while ((input = br.readLine()) != null) System.out.println(input);
        }
        connection.disconnect();
    }

    public static void main(String[] args) throws Exception {
        String trustStorePath = "C:/s/2/storage.store";
        String trustStorePassword = "11112222";

        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

        SSLSocketFactory gostFactory = TLSContext.initClientSSL(null,   trustStorePath, trustStorePassword, null);

        KeyStore keyStore = KeyStore.getInstance("Windows-ROOT");
        keyStore.load(null, null);
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
        tmf.init(keyStore);
        SSLContext sslCtx = SSLContext.getInstance("TLSv1.2");
        sslCtx.init((KeyManager[])null, tmf.getTrustManagers(), (SecureRandom)null);
        SSLSocketFactory commonFactory = sslCtx.getSocketFactory();

        readRemote(commonFactory, new URL("https://www.google.com"));
        readRemote(gostFactory, new URL("https://icrs.nbki.ru/main/"));
    }

Отредактировано пользователем 26 августа 2019 г. 16:08:01(UTC)  | Причина: javascript:__doPostBack('forum$ctl03$PostReply','')

Offline Санчир Момолдаев  
#4 Оставлено : 28 августа 2019 г. 9:36:21(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Автор: Marat77 Перейти к цитате
Санчир, спасибо Вам за ответ, скачал документацию из указанной версии.

Получилось следующим образом (тест):


уточните, у вас все получилось? заметил что несколько раз вы меняли ответ, при первых вроде были ошибки
Техническую поддержку оказываем тут
Наша база знаний
Offline Marat77  
#5 Оставлено : 28 августа 2019 г. 17:30:33(UTC)
Marat77

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

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

Сказал(а) «Спасибо»: 1 раз
Санчир, все получилось (создал 2 SLSocketFactory и подставляю необходимую в HttpsURLConnection). Спасибо еще раз.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.