Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                А если подпись сделать до обновления, а проверять после установки? И файлы вы приложили идентичные. Попробуйте убрать 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                Возможно в трансформе есть неточность - посмотрим.     | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                Очень интересное вскрылось. 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                Код, судя по всему, в зависимости от версии 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,417  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 729 раз в 630 постах
  
	 
	
     | 
    
        
            
		      
                Он там не нужен и проблемы там быть не должно. Или есть? Нужно смотреть в код 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