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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline albertaino  
#1 Оставлено : 20 ноября 2013 г. 12:38:50(UTC)
albertaino

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

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

Здравствуйте!

В iOS-фреймворке есть панель управления, где можно скачать и установить корневой сертификат CA.
В андроиде такой панели нет, поэтому приходится использовать
GostCertificateRequest.getEncodedRootCert(httpAddress).

При запросе по HTTP (httpAddress = "http://www.cryptopro.ru/certsrv/") корневой сертификат
запрашивается нормально, но в случае HTTPS (httpAddress = "https://cryptopro.ru:5555/ui")
выбрасывается исключение java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

(org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:401)).

Как указать GostCertificateRequest доверять всем сертификатам, как это делается в панели для iOS? Там при удалении всех ключей по HTTPS нормально устанавливается корневой сертификат.

Можно ли здесь как-то применить настройку как в JTLS_samples / ApacheHttpClient4XExample.java :

SSLSocketFactory socketFactory = allowAllHostnameVerifier
? new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
: new SSLSocketFactory(sslContext);

Или нужен какой-то клиентский сертификат? Все примеры в samples.jar только для HTTP и "http://www.cryptopro.ru/certsrv/"

Отредактировано пользователем 20 ноября 2013 г. 12:46:40(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 20 ноября 2013 г. 12:46:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Попробуйте с помощью System.setProperty задать trust store.

System.setProperty("javax.net.ssl.trustStoreProvider", "JCSP");
System.setProperty("javax.net.ssl.trustStoreType", "CertStore");
System.setProperty("javax.net.ssl.trustStore", "путь_к_хранилищу");
System.setProperty("javax.net.ssl.trustStorePassword", "пароль");
Offline albertaino  
#3 Оставлено : 20 ноября 2013 г. 12:47:58(UTC)
albertaino

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

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

А что при этом должно быть в trust store? Или оно просто должно быть создано и указано в параметрах? Мне надо взять корневой сертификат с CPCA, про который до этого ничего не было известно, и установить его в хранилище. При это отпечаток может быть сверен по телефону. В trust store ничего не может быть относящегося к этому CA.

Отредактировано пользователем 20 ноября 2013 г. 12:58:27(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 20 ноября 2013 г. 13:19:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Попробуйте записать с помощью CertStore, находящегося в JCP (см. как работать с CertStore в progguide.html в дистрибутиве JCP).
Offline albertaino  
#5 Оставлено : 20 ноября 2013 г. 14:36:17(UTC)
albertaino

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

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

Повторяю вопрос.

Как взять корневой сертификат по HTTPS с CA, О КОТОРОМ ДО СИХ ПОР НИЧЕГО НЕ БЫЛО ИЗВЕСТНО?

trust store не выход - у меня нечем проверить сертификат этого CA, а без этого HTTPS-соединение не устанавливается.
Как в параметрах соединения, на котором работает GostCertificateRequest.getEncodedRootCert, задать доверие всем сертификатам?

Корневой сертификат сверяется по отпечатку, так же как в панели под iOS.

КАК ВЗЯТЬ КОРНЕВОЙ СЕРТИФИКАТ ПО HTTPS ???????????????? По HTTP стягивается без проблем
Offline Евгений Афанасьев  
#6 Оставлено : 20 ноября 2013 г. 14:47:30(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Автор: albertaino Перейти к цитате
Повторяю вопрос.

Как взять корневой сертификат по HTTPS с CA, О КОТОРОМ ДО СИХ ПОР НИЧЕГО НЕ БЫЛО ИЗВЕСТНО?

trust store не выход - у меня нечем проверить сертификат этого CA, а без этого HTTPS-соединение не устанавливается.
Как в параметрах соединения, на котором работает GostCertificateRequest.getEncodedRootCert, задать доверие всем сертификатам?

Корневой сертификат сверяется по отпечатку, так же как в панели под iOS.

КАК ВЗЯТЬ КОРНЕВОЙ СЕРТИФИКАТ ПО HTTPS ???????????????? По HTTP стягивается без проблем


Хранилище доверенных сертификатов должно быть, как минимум - корневой сертификат для связи с тем же CA. Если совсем нет корневых, то берите по http.

Offline albertaino  
#7 Оставлено : 20 ноября 2013 г. 16:02:00(UTC)
albertaino

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

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

Спасибо за ответы, но проблему они не решают.

Если бы все было как вы говорите, то у меня не получилось бы следующее:

1) В панели КриптоПро под iOS делаю "Удалить ключи и сертификаты"
2) Ввожу адрес CA (АДРЕС НАЧИНАЕТСЯ С HTTPS://). CA находится в нашей сети, никаких его корневых нет в trust store
3) Нажимаю "Установить корневой сертификат" - сертификат появляется в файле root.sto.

Каким образом проверяется сертификат CA в нашей сети? В trust store не помещался его корневой. Но панель управления его берет
по HTTPS-соединению и устанавливает в root.sto.
Offline albertaino  
#8 Оставлено : 20 ноября 2013 г. 17:24:25(UTC)
albertaino

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

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

Еще вопрос по этой же теме.

Запускаю панель управления под iOS, устанавливаю корневой сертификат, беру оттуда файл root.sto,
подкладываю его в Андроид (cprocsp/users/stores/root.sto), запускаю в программе TLS-сессию,
сертификат сервера (подписанный тем CA что в root.sto) проверяется, в результате

Error 0x800b0110 (CERT_E_WRONG_USAGE) returned by CertVerifyCertificateChainPolicy!

Как лечить? добавить еще OID здесь:

LPSTR rgszUsages[] = { szOID_PKIX_KP_SERVER_AUTH,
szOID_SERVER_GATED_CRYPTO,
szOID_SGC_NETSCAPE };

или добавить флаги сюда:

DWORD dwCertFlags = 0;

HTTPSPolicyCallbackData polHttps;

polHttps.fdwChecks = dwCertFlags;

if(!CertVerifyCertificateChainPolicy(
CERT_CHAIN_POLICY_SSL,
pChainContext,
&PolicyPara,
&PolicyStatus))
?
Offline Евгений Афанасьев  
#9 Оставлено : 4 декабря 2013 г. 8:53:28(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Автор: albertaino Перейти к цитате
Спасибо за ответы, но проблему они не решают.

Если бы все было как вы говорите, то у меня не получилось бы следующее:

1) В панели КриптоПро под iOS делаю "Удалить ключи и сертификаты"
2) Ввожу адрес CA (АДРЕС НАЧИНАЕТСЯ С HTTPS://). CA находится в нашей сети, никаких его корневых нет в trust store
3) Нажимаю "Установить корневой сертификат" - сертификат появляется в файле root.sto.

Каким образом проверяется сертификат CA в нашей сети? В trust store не помещался его корневой. Но панель управления его берет
по HTTPS-соединению и устанавливает в root.sto.


Внешний java интерфейс не позволяет осуществить подключение по https без доверенных корневых сертификатов.

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