Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Подскажите, какой надо использовать алгоритм для создания Код:
String tmfAlgorithm = "GostX509";
Provider provider; // "JCSP"
TrustManagerFactory.getInstance(tmfAlgorithm, this.getProvider());
Это я пытаюсь клиента JTLS поднять с использованием JCSP. Клиент JTLS с использованием JCP работает нормально.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Нужно: cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME); либо System.setProperty("ru.CryptoPro.defaultSSLProv", "JCSP");
JCSP реализует только алгоритмы подписи, хеширования, шифрования. GostX509 - алгоритм из JTLS (cpSSL.jar).
См. Doc/ЖТЯИ.00087-01-JCSP/Руководство программиста (JTLS).pdf. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Да, да. Я как раз и смотрю документ "ЖТЯИ.00087-01 90 09. Руководство программиста (JTLS).pdf". Раздел "3.2.Использование КриптоПро JTLS через внешний интерфейс JSSE". Страница 7, "Другой способ создать защищенный SSL контекст". Сбивают с толку две строки: Код:
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
Я так понимаю, что первая строка относится к провайдерам JCP и JCSP, отвечающим за контейнеры ключей. Вторая строка относится к провайдеру "JTLS". Ну, почему всё так запутано в документации? Прописали бы явно, где и какой провайдер используется. А еще, заглядываю в документ "ЖТЯИ.00087-01 90 09. Руководство программиста.pdf". Раздел "2.7.1.1.Инициализация хранилища доверенных сертификатов". Там вижу пример Код:KeyStore ks = KeyStore.getInstance("CertStore", "JCSP");
И то же, сижу и чешу репку. То ли "CertStore", то ли "HDIMAGE" для хранилища сертификатов. В JCP я использую тип хранилища "HDImageStore", для файлов хранилищ, созданных в ControlPanel. Пытаюсь ради интереса указать "CertStore" для KeyStore, получаю Код:java.security.NoSuchAlgorithmException: no such algorithm: CertStore for provider JCSP
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Код:
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
Эти строки относятся только к JSSE провайдеру, он реализует менеджер ключей и доверенных сертификатов. Тут указывать провайдер не надо. Только при передаче KeyStore в их функции один будет HDIMAGE, например, а другой - CertStore. CertStore реализует только JCP. Пример примерно так будет выглядеть: Код:
cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME);
KeyStore trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(new FileInputStream(“path_to_trust_store”), “trust_store_password”.toCharArray()); // хранилище корневых сертификатов
// Если контекст для сервера или для клиента с аутентификацией
if (isServer || clientNeedsAuth) {
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME); // <-- заменили тип хранилища и провайдер для работы с ключами
keyStore.load(null, null);
kmf.init(keyStore, “key_store_password”.toCharArray()); // Пароль к контейнеру сервера или клиента
} // if
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
SSLContext sslCtx = SSLContext.getInstance("GostTLS"); // Защищенный контекст
sslCtx.init(kmf != null ? kmf.getKeyManagers() : null, tmf.getTrustManagers(), null);
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Извините, но к концу рабочего дня у меня уже идет вынос мозга. Я понимаю, что вы поставили в cpSSLConfig провайдера по умолчанию. Надеюсь, у заказчиков будет работать только один из двух провайдеров. Ожидаю, что будет работать JCSP. Но вот что меня смущает, это код в 3-й строке. JCP.CERT_STORE_NAME относится к провайдеру JCP, а не к используемому JCSP. И тут меня поджидает неудача. Код:
InputStream stream = getClass().getClassLoader().getResourceAsStream("jcsp-trust");
Provider provider = Security.getProvider("JCSP");
KeyStore keyStore = KeyStore.getInstance("HDIMAGE", provider);
// хранилище без пароля
keyStore.load(stream, null); // ожидаю загрузить файл хранилище сертификатов.
// keyStore.load(stream, new char[0]); // тот же эффект
for(Enumeration<String> aliases = keyStore.aliases(); aliases.hasMoreElements(); ) {
String alias = aliases.nextElement();
System.out.println(alias);
}
Файл хранилища создан в ControlPanel. В хранилище лежит один корневой сертификат. В личном хранилище контейнеров лежит 17 ключей. Тест показывает псевдонимы 17 ключей. Я ожидал один корневой сертификат. Это у меня в JTLS не читает хранилище доверенных сертификатов - trustStore. Да, я не совсем понимаю, как можно открыть файл. В своей реализации я делал так: https://github.com/alexe...ity/csp/CSPKeyStore.javaВ блоге, http://oldcouncil.blogsp...03/apache-cxf-soap.html, я описывал ситуацию подъема файла хранилища Пример поднятия можно найти тут: https://github.com/alexe.../crypto/LocalMerlin.javaначиная со стоки 121. Отредактировано пользователем 27 января 2016 г. 18:03:42(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
JCSP не реализует алгоритм CertStore, он - алгоритм - есть только в JCP и используется при загрузке сертификатов из доверенного хранилища. HDIMAGE - это тип из csp, он отличается от HDImageStore, который, помимо загрузки контейнеров, может загрузить и сертификаты, как CertStore. Отредактировано пользователем 28 января 2016 г. 9:04:18(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
А я то, по наивности, надеялся, что JCSP умеет загружать файлы списка сертификатов, как функция CertOpenStore из CSP CAPILite. И даже наводку дал, как реализовал в своем проекте. Я не нашел функций для потокового чтения хранилища.
Так, всё таки, получается, что у клиентов должны стоять JCP и JCSP. Это правильно? Вопрос упирается в состав нужных лицензий. По идее, нужна лицензия на КрипоПро CSP и лицензия на КриптоПро JCP. Да и не совсем понятно, зачем использовать JCP, если весь функционал есть в нативном коде CSP.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
В любом случае будет установлен и JCP, и JCSP. JCSP заменяет JCP по части работы с ключами (контейнерами), хеширования, подписи и т.п., а Crypto - в шифровании. Если предполагается использовать JCSP, то лицензия на JCP не нужна. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Подскажите, пожалуйста, а как использовать реестры "доверенных" в Windows системе для JTLS? Ну, те, что в настройках IE можно посмотреть. Что-то я в ЖТЯИ не нашел этого момента. Может, я не внимательный.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: miser Подскажите, пожалуйста, а как использовать реестры "доверенных" в Windows системе для JTLS? Ну, те, что в настройках IE можно посмотреть. Что-то я в ЖТЯИ не нашел этого момента. Может, я не внимательный. Вы имеете в виду список сертификатов в "доверенных корневых центрах сертификации"? К сожалению, средствами JCP, JTLS или JCSP их не получить. Для JTLS необходим список в виде файла (хранилища). P.S. Если не ошибаюсь, с помощью MSCAPI провайдера можно работать с этими хранилищами. Отредактировано пользователем 28 января 2016 г. 16:26:32(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close