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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline DeeVolt  
#1 Оставлено : 14 января 2020 г. 9:45:21(UTC)
DeeVolt

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

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

Сказал(а) «Спасибо»: 3 раз
Здравствуйте! Ошибка при попытке обращения по адресу с ГОСТ TLS с использованием Java HTTP клиента.

Java 1.8_232, JCP 2.0.40502

Код:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at ru.CryptoPro.ssl.cl_2.a(Unknown Source)
    at ru.CryptoPro.ssl.cl_2.a(Unknown Source)
    at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source)
    at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
    at ru.CryptoPro.ssl.SSLSocketImpl.n(Unknown Source)
    at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source)
    at ru.CryptoPro.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)
    at com.burokrat.siberia.gui.contractor.ContractorBrowse.ssl(ContractorBrowse.java:455)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.haulmont.cuba.gui.xml.DeclarativeAction.actionPerform(DeclarativeAction.java:81)
    at com.haulmont.cuba.web.gui.components.WebButton.performAction(WebButton.java:43)
    at com.haulmont.cuba.web.gui.components.WebButton$1.buttonClick(WebButton.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
    at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:986)
    at com.vaadin.ui.Button.fireClick(Button.java:393)
    at com.haulmont.cuba.web.toolkit.ui.CubaButton.fireClick(CubaButton.java:42)
    at com.vaadin.ui.Button$1.click(Button.java:61)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168)
    at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118)
    at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:291)
    at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:184)
    at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:92)
    at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
    at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
    at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:355)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:220)
    at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:135)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:99)
    at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:86)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)


Код запроса
Код:

     public void ssl() throws Exception {

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

        SSLContext context = createGostSSLContext();

        URL url = new URL("https://sededu.72to.ru/app");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setUseCaches(false);
        connection.setSSLSocketFactory(context.getSocketFactory());
        connection.connect();

        connection.disconnect();
    }

    private SSLContext createGostSSLContext() throws KeyStoreException, IOException,
            NoSuchAlgorithmException, CertificateException, KeyManagementException {

        KeyStore trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
        trustStore.load(new FileInputStream("/home/buro/store2"), "1".toCharArray());

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

        SSLContext sslCtx = SSLContext.getInstance("GostTLS"); // Защищенный контекст
        sslCtx.init(null, tmf.getTrustManagers(),null);

        return sslCtx;
    }


Однако ocsptest обрабатывает корректно ocsptest_tls_log.txt (17kb) загружен 5 раз(а).

Контейнер сертификатов store2.zip (2kb) загружен 4 раз(а).

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

Offline Евгений Афанасьев  
#2 Оставлено : 14 января 2020 г. 16:50:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Включите логирование для SSLLogger с уровнем ALL, как описано в портале техподдержки, и приложите лог. В приложенном логе OCSP протокол TLS v.1.2, может, надо тоже включить "GostTLSv1.2", а не "GostTLS" в коде.

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

Offline DeeVolt  
#3 Оставлено : 16 января 2020 г. 6:10:51(UTC)
DeeVolt

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

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

Сказал(а) «Спасибо»: 3 раз
Поменял на GostTLSv1.2, ситуация не изменилась. Прикладываю лог.

Offline Евгений Афанасьев  
#4 Оставлено : 16 января 2020 г. 20:46:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Попробовал подключиться. Проблема, полагаю, в том, что используется SNI, в ClientHello клиента надо передать имя хоста, но это не поддерживается в JCP 2.0 для java 7-8, будет поддерживаться только в JCP 2.0-A для java 10+. Если, как сейчас, не передавать имя хоста, то сервер требует аутентификацию по сертификату (шлет certificate request, требуя выбрать на клиенте ключ и сертификат, которых нет).
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
DeeVolt оставлено 17.01.2020(UTC)
Offline DeeVolt  
#5 Оставлено : 20 января 2020 г. 8:05:45(UTC)
DeeVolt

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

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

Сказал(а) «Спасибо»: 3 раз
Благодаря предоставленной информации, удалось выполнить на java 8, при условии использования http клиента из библиотеки org.apache.httpcomponents:httpclient:4.5.9. Спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.