Статус: Новичок
Группы: Участники
Зарегистрирован: 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 )
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Глянул - жестко прошит rsa. Я так понял подпись формируется руками? Может воспользоваться system.xml? Там уже все "подправлено". |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 я так понимаю ничего на эту тему нет.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Ага, именно это я имел в виду. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 13.10.2011(UTC) Сообщений: 4 Откуда: Москва
|
А как все таки реализовать BinarySecurityToken для SOAP-сообщений, на основании ГОСТ-сертификата? Очень нужно, пожалуйста помогите...
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Двумя ответами выше у Вас он получился уже. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 13.10.2011(UTC) Сообщений: 4 Откуда: Москва
|
Согласен, но с ним в итоге подпись не проходит проверку (
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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? Возможно кто-то уже писал подобное?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close