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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Satin  
#1 Оставлено : 20 марта 2016 г. 18:24:12(UTC)
Satin

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

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

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

Есть проблема с подключением к SOAP сервису через SSL, сертификат сайта выпущен на ключе RSA 2048.

Soap-клиент собран посредством Apache CFX.
В логах видно что происходит подмена default SSLSocketFactory вне зависимости от использования флага useHttpsURLConnectionDefaultSslSocketFactory

Вот часть конфигурации CFX, которая отвечает за настройки SSL

<http-conf:tlsClientParameters useHttpsURLConnectionDefaultSslSocketFactory="true">
<sec:keyManagers>
<sec:keyStore type="JKS" password="test"
file="src/main/resources/root.jks"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="test"
file="src/main/resources/root.jks"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>

в JKS находится единственные сертификат - root из цепочки сертификатов удаленного хоста.

В зависимости от флага useHttpsURLConnectionDefaultSslSocketFactory, наблюдается разная работа системы.
false - не удается проверить цепочку сертификатов, которая приходит с сервера 1.log (51kb) загружен 3 раз(а).
true - удаленный хост обрывает соединение после client hello 2.log (19kb) загружен 2 раз(а).
Было подозрение что неправильно подхватывается root сертификат из jks, менял его на CertStore - результат тот же.

Пробовал прописывать через глобальные свойства доверенное хранилище. И JKS, и CertStore - результат тот же.
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "src/main/resources/root.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "test");

Подскажите в чем может быть проблема?

Offline Евгений Афанасьев  
#2 Оставлено : 21 марта 2016 г. 9:04:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
не совсем понятно, что вы хотите получить.
В первом логе 1.log в списке сайферсюит нет ГОСТовых - TLS_CIPHER_*, потому подключение с помощью pSSL не работает.
Во втором логе 2.log подключение, судя по всему, отвергает сервер. Возможно, это из-за того, что он работает с другими сайферсюитамми, например, тоже неГОСТовыми.
Что установлено на сервере? cpSSL способен работать только с ГОСТ алгоритмами.
Offline Satin  
#3 Оставлено : 21 марта 2016 г. 14:47:22(UTC)
Satin

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

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

Сказал(а) «Спасибо»: 1 раз
На сервере, как я описал в первом посте, сертификат абсолютно точно не ГОСТовый. Там RSA 2048.

Основной вопрос - как заставить корректно работать SSL по RSA при установленном JCP.

Решения я вижу 3
1)заставить cryprtopro.SSLSocketFactoryImpl работать с НЕ ГОСТовыми сертификатами. Вы пишите что это невозмжно
2)исключить установку cryprtopro.SSLSocketFactoryImpl в качестве фабрики SSL по умолчанию (мне JCP нужен только в части подписания документов)
3)заставить apache cfx использовать не дефолтную фабрику SSL

Я бы с радостью воткнул любую другую фабрику для ssl, но к сожалению по логу все равно происходит перехват в ru.CryptoPro.ssl.s
вот так попытался использовать SUNовскую фабурику

org.apache.cxf.endpoint.Client client = ClientProxy.getClient(c);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, new SecureRandom());
// update client to use our custom SSLSocketFactory (using our
// truststore and keystore)
TLSClientParameters tlsClientParameters = new TLSClientParameters();
tlsClientParameters.setSSLSocketFactory(sslContext.getSocketFactory());
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("src/main/resources/astralRoot.jks"),
"Tochka".toCharArray());

TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
tlsClientParameters.setTrustManagers(tmf.getTrustManagers());

// tlsClientParameters.setCipherSuitesFilter(filter);
httpConduit.setTlsClientParameters(tlsClientParameters);

и она совершенно нормально садиться, но затем по логи видно что опять происходит перехват 3.log (33kb) загружен 2 раз(а).

как то можно исключить встраивание подсистемы ssl от криптопро хотя бы на уровне SSL контекста?
Offline Евгений Афанасьев  
#4 Оставлено : 21 марта 2016 г. 15:03:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: Satin Перейти к цитате
мне JCP нужен только в части подписания документов

Удалите cpSSL.

Offline Satin  
#5 Оставлено : 21 марта 2016 г. 17:56:23(UTC)
Satin

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо, помогло
Offline Alexander Kumanyaev  
#6 Оставлено : 20 августа 2020 г. 13:59:05(UTC)
Alexander Kumanyaev

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

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

Сказал(а) «Спасибо»: 2 раз
Так все-таки после установки JCP 2.0 на Java 8 есть ли возможность для SOAP сервисов (используем Metro) явно указывать SSLSocketFactory при создании клиента к ГОСТ сервисам?
Если брать стоковый https:
Код:

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslSocketFactory);

То всё работает ок и нормально передается клиентский SSL сертификат указанный в sslSocketFactory.

Но если мы пытаемся его же засетить в SOAP:
Код:

SignSoap port = service.getSignSoap();
((BindingProvider) port).getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sslSocketFactory);

То по ощущениям ничего не происходит, видно, что подхватывается КриптоПро SSL, но без предварительных настроек хранилищ доверенных сертификатов и ключей.

Обойти удалось только через конфигурирование переменных Java
Код:
-Djavax.net.ssl.trustStore
-Djavax.net.ssl.trustStoreType
-Djavax.net.ssl.trustStorePassword
...

Но этот способ не устраивает, т.к. мне нужно изменять значения хранилищ ключей динамически.
Есть ли риск, что это сломает обычные RSA SSL сервисы?
Offline Alexander Kumanyaev  
#7 Оставлено : 20 августа 2020 г. 14:14:06(UTC)
Alexander Kumanyaev

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

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

Сказал(а) «Спасибо»: 2 раз
Отбой, была ошибка в импорте
Правильный для Metro такой:
Код:
com.sun.xml.ws.developer.JAXWSProperties

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.