Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ 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 (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.