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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Vladimir2008  
#1 Оставлено : 6 мая 2016 г. 17:14:47(UTC)
Vladimir2008

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

Группы: Участники
Зарегистрирован: 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 раз(а).
Offline Максим Коллегин  
#2 Оставлено : 6 мая 2016 г. 18:40:37(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
А если подпись сделать до обновления, а проверять после установки?
И файлы вы приложили идентичные.
Попробуйте убрать smev трансформ из подписи, может с ним проблема.

Отредактировано пользователем 6 мая 2016 г. 18:41:55(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Vladimir2008  
#3 Оставлено : 10 мая 2016 г. 10:12:56(UTC)
Vladimir2008

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 10 мая 2016 г. 13:10:06(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Возможно в трансформе есть неточность - посмотрим.
Знания в базе знаний, поддержка в техподдержке
Offline Максим Коллегин  
#5 Оставлено : 11 мая 2016 г. 10:32:03(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 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)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
vadimromanov оставлено 13.12.2016(UTC)
Offline Vladimir2008  
#6 Оставлено : 11 мая 2016 г. 11:50:11(UTC)
Vladimir2008

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

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

Сказал(а) «Спасибо»: 1 раз
SafeCanonicalizationMethods - где взять аналог для Framework 4.0?
И как быть с преобразованием XmlDsigXPathTransform (не smev)?

Отредактировано пользователем 11 мая 2016 г. 11:56:22(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#7 Оставлено : 11 мая 2016 г. 13:25:05(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Код, судя по всему, в зависимости от версии Framework ветвиться не умеет - собирайте отдельно для 4.5.1 и для более ранних.
Для XmlDsigXPathTransform - добавьте в SafeCanonicalizationMethods XmlDsigXPathTransform.Algorithm
Знания в базе знаний, поддержка в техподдержке
Offline Vladimir2008  
#8 Оставлено : 11 мая 2016 г. 13:36:03(UTC)
Vladimir2008

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

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

Сказал(а) «Спасибо»: 1 раз
Вопрос в том и состоит - как сделать аналог SafeCanonicalizationMethods (появился только в FW 4.5.1) для FW 4.0 ?
Offline Максим Коллегин  
#9 Оставлено : 11 мая 2016 г. 14:53:16(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 714 раз в 619 постах
Он там не нужен и проблемы там быть не должно. Или есть? Нужно смотреть в код System.Security.Xml
Знания в базе знаний, поддержка в техподдержке
Offline Vladimir2008  
#10 Оставлено : 11 мая 2016 г. 15:17:15(UTC)
Vladimir2008

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

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