Статус: Активный участник
Группы: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 41 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Установлены Windows 10 (64-битная), КриптоПро CSP 3.9.8423, КриптоПро .Net 1.0.5913.0. Создаю подпись в XML-документе через примеры в C:\Program Files (x86)\Crypto Pro\.NET SDK\Examples\4.0, запускаю в командной строке: Цитата:SimpleCS.exe Xml.SignDocument mycert Создается и проверяется успешно. До тех пор, пока не установлю некие обновления Windows, а именно (перечисляю под все версии Windows, на которых срабатывает также): - На Windows 7 обновления KB3135983 и KB3136000 - На Windows 8 - KB3135985 и KB3135998 (возможно, еще - KB3135994) - На Windows 10 - KB3140768 и KB3147458 - также обновление KB3135996 Если эти обновления установлены, то подпись формируется, но не проверяется - signedXml.CheckSignature() всегда выдает false (на этом месте рушится в моем программе). Если говорить о примере, указанном выше, сообщение такое: Цитата:Создан новый XML файл. XML подписан. Подпись не верна. Как только обновления деинсталлированы - опять все работает. От версии .Net Framework - не зависит - проблема и на 2.0 и 4.0. Просьба прокомментировать, как с этим бороться, поскольку обновления приходится сносить не с одного рабочего места (их (мест) относительно много). В случае, когда успешно (обновления не установлены): doc_to_sign.xml (1kb) загружен 4 раз(а). doc_signed.xml (4kb) загружен 9 раз(а).Эти файлы - когда обновления установлены (не проверяется подпись): doc_to_sign.xml (1kb) загружен 3 раз(а). doc_signed.xml (4kb) загружен 7 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
А если подпись сделать до обновления, а проверять после установки? И файлы вы приложили идентичные. Попробуйте убрать smev трансформ из подписи, может с ним проблема. Отредактировано пользователем 6 мая 2016 г. 18:41:55(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 41 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Да, проблема в указанном примере была именно в smev-трансформе, если его убрать, то работает, точнее работает преобразование: Цитата:XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env); Проблема возникает, когда хочется подписать несколькими ЭП, причем не сразу всеми, когда известно их кол-во. Если кол-во известно, то две строки кода Цитата:XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); reference.AddTransform(env); нужно прописать столько раз, сколько подписей (во всяком случае - так работает). Но если заранее неизвестно их кол-во, то писать эти две строки "с запасом" - неправильно. Проблему решал другой трансформ: Цитата:XmlDsigXPathTransform xpath = CreateXPathTransform(); reference.AddTransform(xpath); где Цитата:private static XmlDsigXPathTransform CreateXPathTransform() { XmlDocument doc = new XmlDocument();
doc.LoadXml("<XPath xmlns:dsig=\"http://www.w3.org/2000/09/xmldsig#\">" + "not(ancestor-or-self::dsig:Signature)</XPath>"); XmlElement xPathElem = (XmlElement)doc.SelectSingleNode("/XPath");
XmlDsigXPathTransform xForm = new XmlDsigXPathTransform();
xForm.LoadInnerXml(xPathElem.SelectNodes("."));
return xForm; } Но с учетом указанных выше обновлений - это не работает. Подпись создается корректной, но валидацию на компе с такими обновлениями Windows не проходит. Т.е., получается КриптоПро .Net работает не 100%-но (в разных версиях Windows)? Отредактировано пользователем 10 мая 2016 г. 11:02:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
Возможно в трансформе есть неточность - посмотрим. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
Очень интересное вскрылось. MS ввели понятие safe transform. Увидел, рассматривая код рефлектором. Ошибку можно отследить, включив лог SignedXml, как написано тут: https://social.msdn.micr...buglog?forum=xmlandnetfxЦитата: System.Security.Cryptography.Xml.SignedXml Information: 17 : [SignedXml#01475d71, UnsafeTransformMethod] Canonicalization method "urn://smev-gov-ru/xmldsig/transform" is not on the safe list. Safe canonicalization methods are: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
Лечится добавлением кода в проверку: Код:signedXml.SafeCanonicalizationMethods.Add("urn://smev-gov-ru/xmldsig/transform");
Отредактировано пользователем 11 мая 2016 г. 10:38:21(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 41 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
SafeCanonicalizationMethods - где взять аналог для Framework 4.0? И как быть с преобразованием XmlDsigXPathTransform (не smev)? Отредактировано пользователем 11 мая 2016 г. 11:56:22(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
Код, судя по всему, в зависимости от версии Framework ветвиться не умеет - собирайте отдельно для 4.5.1 и для более ранних. Для XmlDsigXPathTransform - добавьте в SafeCanonicalizationMethods XmlDsigXPathTransform.Algorithm |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 41 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Вопрос в том и состоит - как сделать аналог SafeCanonicalizationMethods (появился только в FW 4.5.1) для FW 4.0 ?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,390 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 714 раз в 619 постах
|
Он там не нужен и проблемы там быть не должно. Или есть? Нужно смотреть в код System.Security.Xml |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 04.06.2008(UTC) Сообщений: 41 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Да, проблема в FW 4.0 есть: Цитата: System.Security.Cryptography.Xml.SignedXml Information: 17 : [SignedXml#02b3b1be, UnsafeTransformMethod] Метод синхронизации "http://www.w3.org/TR/1999/REC-xpath-19991116" не входит в список безопасных. Безопасны следующие методы синхронизации: "http://www.w3.org/TR/2001/REC-xml-c14n-20010315", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments", "http://www.w3.org/2001/10/xml-exc-c14n#", "http://www.w3.org/2001/10/xml-exc-c14n#WithComments", "http://www.w3.org/2000/09/xmldsig#enveloped-signature", "http://www.w3.org/2000/09/xmldsig#base64", "urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform", "http://www.w3.org/2002/07/decrypt#XML". System.Security.Cryptography.Xml.SignedXml Information: 12 : [SignedXml#02b3b1be, VerificationFailure] Проверка Ссылки не прошла.
Отредактировано пользователем 11 мая 2016 г. 15:18:26(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close