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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline alexey509  
#1 Оставлено : 13 октября 2011 г. 22:41:34(UTC)
alexey509

Статус: Новичок

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

Всем привет.
Исходные данные:
Разработка web-сервиса на Visual Studio 2005 + WSE 3.0
Версия КриптоПро CSP 3.6
Версии сборок Sharpei 1.0.0.10

Есть сертификат, корректно установленный с e-tokena. Со ссылкой на закрытый ключ. Ключ в контейнере в реестре.

Задача: подписать Body SOAP-сообщения.

Подпись вроде как формируется, но при добавлении открытого ключа для проверки подписи начинаются проблемы.
Т.е. в .net 2.0 есть объект X509SecurityToken, реализующий представление BinarySecurityToken в SOAP. После инициализации, свойства объекта PublicKey и Key выдают exception: WSE2382: Key Type is not valid.
Судя по StackTrace:
в Microsoft.Web.Services3.Security.Cryptography.RSA.set_Key(AsymmetricAlgorithm value)
в Microsoft.Web.Services3.Security.Tokens.X509SecurityToken.get_Key()
происходит инициализация ключа по алгоритму RSA.

Вопрос: как правильно сформировать BinarySecurityToken?
Или как привильно подписать Body SOAP-сообщения используя алгоритмы ГОСТ?

P.S. Видимо главным советом будет переход на WCF )

Offline Максим Коллегин  
#2 Оставлено : 13 октября 2011 г. 23:46:57(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Глянул - жестко прошит rsa.
Я так понял подпись формируется руками? Может воспользоваться system.xml? Там уже все "подправлено".
Знания в базе знаний, поддержка в техподдержке
Offline alexey509  
#3 Оставлено : 14 октября 2011 г. 3:29:53(UTC)
alexey509

Статус: Новичок

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

maxdm написал:
Глянул - жестко прошит rsa.
Я так понял подпись формируется руками? Может воспользоваться system.xml? Там уже все "подправлено".


Прошу прощения, но я не понимаю чем можно воспользоваться в system.xml?

Я использовал SignedXml, делал все как в примерах Sharpei Sdk. Только вот BinarySecurityToken пришлось самому формировать.
Т.е. последовательность следующая
X509SecurityToken securityToken = new X509SecurityToken(_cert); //_cert - это объект X509Certificate2
XmlElement bt = securityToken.GetXml(doc); //doc - это объект XmlDocument - Который представляет собой конверт SOAP-сообщения

итого в bt я имею:
<wsse:BinarySecurityToken ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="CertId-8ffc54bd7bb1485993726c69610864fa">MIIDEzCCAsKg........QSM=</wsse:BinarySecurityToken>

И данный объект я уже добавляю к подписи. Но таким образом я думаю не корректно это делать.

Наверное можно написать собственный класс, унаследовавшись от BinarySecurityToken, но пока не разобрался как это правильно сделать(
А в Sharpei я так понимаю ничего на эту тему нет.






Offline Максим Коллегин  
#4 Оставлено : 14 октября 2011 г. 10:41:47(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Ага, именно это я имел в виду.
Знания в базе знаний, поддержка в техподдержке
Offline alexey509  
#5 Оставлено : 17 октября 2011 г. 16:17:31(UTC)
alexey509

Статус: Новичок

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

А как все таки реализовать BinarySecurityToken для SOAP-сообщений, на основании ГОСТ-сертификата?
Очень нужно, пожалуйста помогите...
Offline Максим Коллегин  
#6 Оставлено : 17 октября 2011 г. 16:39:17(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Двумя ответами выше у Вас он получился уже.
Знания в базе знаний, поддержка в техподдержке
Offline alexey509  
#7 Оставлено : 17 октября 2011 г. 17:41:55(UTC)
alexey509

Статус: Новичок

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

Согласен, но с ним в итоге подпись не проходит проверку (
Offline Максим Коллегин  
#8 Оставлено : 17 октября 2011 г. 17:58:36(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Проверять нужно примерно так же.
Найти токен, получить из него сертификат и наследовать класс.
http://cryptopro.ru/foru....aspx?g=posts&t=1685

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

Знания в базе знаний, поддержка в техподдержке
Offline sixdays  
#9 Оставлено : 13 декабря 2011 г. 18:39:15(UTC)
sixdays

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

Группы: Участники
Зарегистрирован: 01.09.2010(UTC)
Сообщений: 10
Мужчина
Откуда: Казань

И все же: возвращаясь к изначальной проблеме:
Код:

X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509Certificate2 certificate = store.Certificates[0];

SoapContext context = client.RequestSoapContext;
X509SecurityToken token = new X509SecurityToken(certificate);

context.Security.Tokens.Add(token);
context.Security.Timestamp.TtlInSeconds = 60;

MessageSignature signature = new MessageSignature(token); // Вот здесь, собственно и валится: WSE 2382: Key Type is not valid
context.Security.Elements.Add(signature);


Причины данного поведения понятны.
Интересует именно решение. Что переопределить, чтобы заработало WSE + Sharpei + Gost?
Возможно кто-то уже писал подобное?
Offline Павел Смирнов  
#10 Оставлено : 13 декабря 2011 г. 18:51:37(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
WSE в Шарпее не поддерживается. Используйте WCF.

См. http://www.cryptopro.ru/forum2/default.aspx?g=posts&t=4081.

Отредактировано пользователем 13 декабря 2011 г. 18:52:34(UTC)  | Причина: Не указана

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