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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline nick_stan  
#1 Оставлено : 2 декабря 2011 г. 19:54:29(UTC)
nick_stan

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

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

Где можно почитать как подключить CryptoPro JCP в качестве средства для генерации и проверки подписей по стандарту WS-Security (Security Token).

Можно ли его подключить к rampart'у для Axis2'а или каким-то другим образом?

Для rampart'а есть понятие Crypto Provider - туда по умолчанию вставлен org.apache.ws.security.components.crypto.Merlin, что надо использовать для CryptoPro JCP?

Либо как это можно подключить для других технологий JAX-WS, например...

Offline nick_stan  
#2 Оставлено : 20 декабря 2011 г. 20:40:51(UTC)
nick_stan

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

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

Попробую более конкретно задать вопрос.

Существует ли какой-нибудь промышленный способ подписи на лету в клиенте Web-сервиса, написанного на Java с помощью любой из распространенных
технологий (JAX-WS + WSS4J, Axis2), кроме как руками лепить генерацию подписи, SecurityToken и прочее. В примерах на JCP есть только подпись
XML-файлов, но никак не SOAP-запросов, где кроме самой подписи надо сформировать еще некие дополнительные поля необходимые для
стандартов WS-Security. Возможно существует какая-то стандартная технология подключения алгоритмов к WSS4J, но нигде ничего не нашлось.
Offline nick_stan  
#3 Оставлено : 22 декабря 2011 г. 21:22:03(UTC)
nick_stan

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

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

Отвечу себе сам - может кому-то будет полезно.

Сделал все это вручную, т.е. написал SOAPHandler в технологии JAX-WS, который налету считает подпись необходимой части
SOAP-документа (<Body>), руками формирую SecurityToken со всеми заголовками и сертификатом в качестве самого BinaryToken.
Также руками приходится изменять KeyInfo в XMLSignature, чтобы поставить там ссылку на Token. Затем обратно полученный документ
отдаю в SOAPHandler. Аналогично с проверкой подписи (там проще, т.к. формировать руками ничего не надо - только проверять).

Думаю что есть еще один путь - это исправить WSS4J (т.к. он в исходниках то это возможно) и передавать ему ключ не в виде
байтового массива (CryptoPro JCP не поддерживает метод getEncoded на PrivateKey), а в виде ссылки на класс PrivateKey, а также написать
свой класс на основе CryptoBase (сейчас там Merlin для поддержки других типов store, кроме JKS)... но этот путь длинный и в принципе правильнее
его делать самой компании CryptoPro, т.к. ее специалисты в любом случае лучше знают свой продукт, а также возможно смогут договориться с
Apache, чтобы этот патч был включен в базовый релиз WSS4J.


Offline cross  
#4 Оставлено : 22 декабря 2011 г. 23:16:30(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Пришлите мне на email запрос, пришлю вам небольшой пример работы с wss4j. (cross at cryptopro.ru)
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Cynepnaxa  
#5 Оставлено : 13 апреля 2012 г. 18:08:18(UTC)
Cynepnaxa

Статус: Активный участник

Группы: Участники
Зарегистрирован: 04.04.2008(UTC)
Сообщений: 43
Откуда: Новосибирск

Проблема актуальная. Не могли бы уважаемые участники выложить исходники своих наработок? У меня есть пример сообщения от участника СМЭВ. Я этот пример скопипастил и пытаюсь Base64 - данные вручную пересчитать. С RSA такой фокус прошел, а с ГОСТом почему-то даже хеш не совпадает. В примере участника, на выходе примера http://www.cryptopro.ru/...pomoshchyu-kriptopro-jcp и у меня - везде разный хэш. При этом канонизация и алгоритм хэша совпадают. Странно. Ниже привожу кусок кода. GOST_R34.11-94 и CryptoPro2(gostr34102001-gostr3411) из нашего самописного провайдера, мы это давно используем. Подскажите плз, почему хэш не совпадает? И кстати такой вопрос - как вообще этим СМЭВом пользуются? Какой продукт работает из коробки? Похоже что на яве СМЭВ никто не делает почти... Хочу что-нибудь такое поднять, чтобы подписывало-проверяло для проверки своих разработок.

Document doc = XMLUtils.newDocument(new InputSource(new StringReader(sourceXml)));
Canonicalizer canon = Canonicalizer.getInstance("http://www.w3.org/2001/10/xml-exc-c14n#");
byte canonXmlBytes[] = canon.canonicalizeSubtree(XPathAPI.selectSingleNode(doc , "//S:Body"));

log.info("canon body before = "+new String(canonXmlBytes)+";");

MessageDigest dig = MessageDigest.getInstance("GOST_R34.11-94");
byte[] digestBytes = dig.digest(canonXmlBytes);
String digestB64 = Base64.encode(digestBytes);
Element digestElement = (Element)XPathAPI.selectSingleNode(doc , "//ds:DigestValue");
digestElement.setTextContent(digestB64);

log.info("digestB64 = "+digestB64+";");

canonXmlBytes = canon.canonicalizeSubtree(XPathAPI.selectSingleNode(doc , "//*[local-name(.) = 'SignedInfo']"));

log.info("canon signInfo = "+new String(canonXmlBytes)+";");

CryptoProPrivateKey key = new CryptoProPrivateKey("cont25122009_14");
Signature sign = Signature.getInstance("CryptoPro2");
sign.initSign(key);
sign.update(canonXmlBytes);
byte[] signBytes = sign.sign();
String signB64 = Base64.encode(signBytes);
Element signElement = (Element)XPathAPI.selectSingleNode(doc , "//ds:SignatureValue");
signElement.setTextContent(signB64);
Offline Евгений Афанасьев  
#6 Оставлено : 26 апреля 2012 г. 0:52:19(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
Здравствуйте.
Если вы используете wss4j+xmldsigri, то CryptoProXMLDSigRI обновлен. См. http://www.cryptopro.ru/....aspx?g=posts&t=4590

Отредактировано пользователем 26 апреля 2012 г. 0:55:24(UTC)  | Причина: Не указана

Offline i25061  
#7 Оставлено : 3 сентября 2012 г. 11:35:28(UTC)
i25061

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

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
afev написал:
Здравствуйте.
Если вы используете wss4j+xmldsigri, то CryptoProXMLDSigRI обновлен. См. http://www.cryptopro.ru/....aspx?g=posts&t=4590
Я так понимаю, что CryptoProXMLDSigRI.jar изготовлен из исходников, входящих в состав openjdk. Очень похоже... :)
А там GNU General Public License version 2.
Можно посмотреть на исходники CryptoProXMLDSigRI.jar?
Offline Евгений Афанасьев  
#8 Оставлено : 4 сентября 2012 г. 0:14:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 708 раз в 669 постах
xmlsec (Apache Santuario), на основе которого был сделан XMLDSigRI.jar, распространяется с лицензией Apache License 2.0, не GPL 2.0. Но на счет того, чтобы выложить исходный код, подумаем.

Отредактировано пользователем 4 сентября 2012 г. 0:15:41(UTC)  | Причина: Не указана

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