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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline romaann  
#1 Оставлено : 2 сентября 2009 г. 15:34:23(UTC)
romaann

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

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

Добрый день!

При подписывании XML возникает ошибка "Неверно сформированный элемент ссылки.".
В подписываемом элементе Id указан следующим образом:
Код:
<soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="test">


В программе ссылка указывается следующим образом:
Код:
refer.Uri = "#test";


При вызове метода ComputeSignature появляется указанная выше ошибка.
Подскажите, плз, в чем не прав?
Offline Челпанов А.  
#2 Оставлено : 2 сентября 2009 г. 17:24:44(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Проблема в namespace атрибута Id, который отличается от namespace узла soapenv. Есть несколько решений
1. Удалить у атрибута Id namespace
2. Добавить к узлу soapenv:Body другой атрибут, на который ссылаться при подписи.
3. Ссылаться при подписи на весь документ, а узел выбирать соответствующими transform
С уважением, Александр.
Offline romaann  
#3 Оставлено : 3 сентября 2009 г. 16:50:39(UTC)
romaann

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

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

Т.е., как я понимаю, решить эту проблему только на стороне получателя нельзя?
Offline Челпанов А.  
#4 Оставлено : 8 октября 2009 г. 22:09:36(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Оказывается есть другой более простой метод - перекрыть метод GetIdElement у SignedXml и при подписи и проверке пользоваться этим классом.
Код:

    class MySignedXml : SignedXml
    {
        public MySignedXml(XmlDocument document)
            :base(document)
        {
        }

        public override XmlElement GetIdElement(XmlDocument document, string idValue)
        {
            XmlNameTable myXmlNameTable = new NameTable();
            XmlNamespaceManager myNamespacemanager = new XmlNamespaceManager(myXmlNameTable);
            myNamespacemanager.AddNamespace( "wsu", 
                    "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" );
            XmlNodeList lst = document.SelectNodes("//*[@wsu:Id='" + idValue + "' or @wsu:ID='" + idValue + 
                    "' or @wsu:ID='" + idValue + "']", myNamespacemanager);
            if (lst.Count != 1)
                return null;
            return (XmlElement)lst.Item(0);
        }
    }

С уважением, Александр.
Offline romaann  
#5 Оставлено : 9 октября 2009 г. 13:52:18(UTC)
romaann

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

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

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