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

Уведомление

Icon
Error

12 Страницы«<34567>»
Опции
К последнему сообщению К первому непрочитанному
Offline commander  
#41 Оставлено : 12 октября 2012 г. 17:13:14(UTC)
commander

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

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

Сказал(а) «Спасибо»: 4 раз
Смирнов написал:
commander написал:
Так что, все делают подпись вручную, без использования SignedXml? Может кто-нибудь поделится примером?
Или у всех запросы в СМЭВ, подписанные способом из примера Криптопро, тоже проходят?
Я пока сделал как описывал ранее (без префиксов), но есть подозрение, что так проходят запросы не ко всем ведомствам :(

Кстати, зачем в вашем примере <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> ? Сама подпись совсем не enveloped, хотя вряд ли это влияет на результат проверки.

Это, вроде бы, в примере Криптопро .NET делается. И соответствует "Методическим рекомендациям по разработке электронных сервисов" (2.5.5):
"Для первого элемента Transform алгоритм выставляется значение "http://www.w3.org/2000/09/xmldsig#enveloped-signature"."
Offline Павел Смирнов  
#42 Оставлено : 12 октября 2012 г. 17:13:37(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
khomenko написал:
PreserveWhitespace - довольно странно: все пробелы, переносы и т.п. должен съесть трансформ.

Не так. Пробельные символы при каноникализации удаляются только незначимые. Пример здесь. А вот preserveWhitespace=false удаляет гораздо больше.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline Павел Смирнов  
#43 Оставлено : 18 октября 2012 г. 15:09:14(UTC)
Павел Смирнов

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
commander написал:
Это, вроде бы, в примере Криптопро .NET делается. И соответствует "Методическим рекомендациям по разработке электронных сервисов" (2.5.5):
"Для первого элемента Transform алгоритм выставляется значение "http://www.w3.org/2000/09/xmldsig#enveloped-signature"."

В том месте методических рекомендаций делается действительно приложенная (enveloped) подпись, т.к. там узел Signature является непосредственным потомком подписываемого узла. В примере КриптоПро .NET подпись делается отделённая, а трансформ оставлен по недосмотру. Поправим.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline NIC  
#44 Оставлено : 18 октября 2012 г. 17:13:11(UTC)
NIC

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 5 раз в 2 постах
commander написал:
Неужели никто не знает, как можно заставить формировать SignedXml все идентификаторы в пространстве имен "ds:"?
Ведь из примера они получаются "<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">" вместо "ds:SignedInfo" ит.д., а это не соответствует Методическим рекомендациям.


Легко:

Код:
   
 class SignedXmlPrefix : SignedXml
    {
        public SignedXmlPrefix(XmlDocument document)
            : base(document)
        { }

        public SignedXmlPrefix(XmlElement element)
            : base(element)
        { }

        public SignedXmlPrefix()
            : base()
        { }

        public void ComputeSignature(string prefix)
        {
            this.BuildDigestedReferences();
            SignatureDescription description = CryptoConfig.CreateFromName(this.SignedInfo.SignatureMethod) as SignatureDescription;
            
            HashAlgorithm hash = description.CreateDigest();
            
            GetDigest(hash, prefix);
            this.m_signature.SignatureValue = description.CreateFormatter(this.SigningKey).CreateSignature(hash);

        }
        private void BuildDigestedReferences()
        {
            Type t = typeof(SignedXml);
            MethodInfo m = t.GetMethod("BuildDigestedReferences", BindingFlags.NonPublic | BindingFlags.Instance);
            m.Invoke(this, new object[] { });
        }
        private byte[] GetDigest(HashAlgorithm hash, string prefix)
        {
            XmlDocument document = new XmlDocument();
            document.PreserveWhitespace = true;

            XmlElement e = this.SignedInfo.GetXml();
            document.AppendChild(document.ImportNode(e, true));
            
            Transform canonicalizationMethodObject = this.SignedInfo.CanonicalizationMethodObject;
            SetPrefix(prefix, document); 

            canonicalizationMethodObject.LoadInput(document);
            return canonicalizationMethodObject.GetDigestedOutput(hash);
        }

        private void SetPrefix(string prefix, XmlNode node)
        {
            foreach (XmlNode n in node.ChildNodes)
                SetPrefix(prefix, n);
            node.Prefix = prefix;
        }


        public XmlElement GetXml(string prefix)
        {
            XmlElement e = this.GetXml();
            SetPrefix(prefix, e);
            return e;
        }


    }


В коде:

Код:

...
signedXml.ComputeSignature("ds");
...
signature = signedXml.GetXml("ds");


mustiks

Большое спасибо за статью. А то все подступался-подступался к переводу сервиса на WCF, но каждый раз объем возникающих проблем не позволял довести процесс до конца.
Offline commander  
#45 Оставлено : 18 октября 2012 г. 19:15:22(UTC)
commander

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

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

Сказал(а) «Спасибо»: 4 раз
NIC, огромное спасибо! Теперь все как в Методических рекомендациях :)
Offline commander  
#46 Оставлено : 19 октября 2012 г. 13:01:17(UTC)
commander

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

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

Сказал(а) «Спасибо»: 4 раз
При такой подписи, вроде бы, наконец-то заработали сервисы, которые раньше выдавали ошибку "SMEV-100003: При обработке запроса произошла ошибка: Неверная ЭП сообщения" (но проходили проверку в сервисе проверки ЭП-ОВ!), например сервисы пенсионного фонда. Ура :)
Offline NIC  
#47 Оставлено : 23 октября 2012 г. 14:41:23(UTC)
NIC

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

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

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 5 раз в 2 постах
commander написал:
При такой подписи, вроде бы, наконец-то заработали сервисы, которые раньше выдавали ошибку "SMEV-100003: При обработке запроса произошла ошибка: Неверная ЭП сообщения" (но проходили проверку в сервисе проверки ЭП-ОВ!), например сервисы пенсионного фонда. Ура :)


Вместе мы победим СМЭВ :)
Offline alegn  
#48 Оставлено : 2 ноября 2012 г. 15:15:22(UTC)
alegn

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

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

В разделе "Пример взаимодействия с сервисом СМЭВ" из документации КриптоПро .NET (далее - Документация) демонстрируется "взаимодействие с сервиcом СМЭВ в режиме безопасности сообщений". На этом же принципе базируется и статья от mustiks (далее - Статья).
Для обеспечения такого взаимодействия, насколько я понял, требуются (в терминах Документации):
- сертификат и секретный ключ сервиса (для проверки подлинности сервера);
- сертификат и секретный ключ клиента (для проверки подлинности клиента).
В связи с этим буду очень благодарен, если кто-нибудь ответит на несколько вопросов. Хорошо понимаю, что вопросы дилетантские, но что есть то есть. Вопросы следующие:
1. Каким образом создается соответствующая пара ключ/сертификат? Каким УЦ должен быть выдан сертификат?
2. Каким образом клиент получит сертификат сервера? В спецификациях сервиса, который мне надо реализовать, ничего не говорится о таком сертификате. Получается, что, если реализовывать сервис по образцу примеров Документации/Статьи, то неотъемлемой частью его должен быть сертификат сервера, предоставляемый потенциальному клиенту при необходимости. Наверное, наличие такого сертификата должно быть как-то отражено в документации на сервис?
3. Как соотносятся подпись типа "ЭП-СП" (из Метод. рекомендаций) и подпись для удостоверения подлинности клиента? В примерах запрос клиента подписывается секретным ключом пары ключ-сертификат удостоверяющей подлинность клиента. Означает ли это. что для удостоверения подлинности клиента должна использоваться подпись типа ЭП-СП? Или же, наоборот, запрос должен быть подлисан двумя подписями: ЭП-СП и отдельной подписью для проверки подлинности клиента?

И еще вопрос. Правильно ли я понимаю, что если использовать WCF по схеме, предложенной в Документации/Статье, то подписание выполняется в некотором роде "автоматически", в то время как большинство проблем, обсуждаемых в этой теме, относится к ситуации, когда подпись выполняется вручную? Если это так, какой способ реализации сервиса порекомендуют участники обсуждения с учетом имеющегося на данный момент у них опыта: с использованием WCF или без? Или в другой формулировке: как проще реализовать сервис по требованиям СМЭВ: с использованием WCF или без?

И в заключение:
1. Извините за то что "много букв".
2. Как говорится, "прошу сильно не пинать".
Offline TimE  
#49 Оставлено : 26 ноября 2012 г. 14:47:22(UTC)
TimE

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

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

Добрый день!
Может кто-нибудь сталкивался с проблемой в примере из CDK SimpoleCs.2010 метод signedXml.ComputeSignature(); выдаёт ошибку Signing key is not loaded, Сертификат геренил здесь: http://www.cryptopro.ru/certsrv.
Подскажите, пожалуйста, в какую сторону копать?
Заранее благодарен
Offline commander  
#50 Оставлено : 27 ноября 2012 г. 16:01:11(UTC)
commander

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

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

Сказал(а) «Спасибо»: 4 раз
TimE написал:
Добрый день!
Может кто-нибудь сталкивался с проблемой в примере из CDK SimpoleCs.2010 метод signedXml.ComputeSignature(); выдаёт ошибку Signing key is not loaded, Сертификат геренил здесь: http://www.cryptopro.ru/certsrv.
Подскажите, пожалуйста, в какую сторону копать?
Заранее благодарен

У Криптопро и Криптопро.NET срок лицензии точно не истек? Проверьте, в этом случае какая-то не очевидная ошибка выдается.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
12 Страницы«<34567>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.