Статус: Новичок
  Группы: Участники
 Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
  
	 
	
     | 
    
        
            
		      
                Коллеги, добрый день! Уже n-ый день не могу решить проблему. Прошу Вашей помощи. Мне необходимо собрать SOAP-пакет, установить его в тело запроса HTTP, канонизировать Body и вычислить DigestValue, затем подписать блок SignedInfo. Сообщения до веб-сервиса доходят, но не проходят верификацию подписи (на той стороне и на моем ПК сертификаты одинаковые), выдает ответ 500 и ошибку ns1:SecurityError. Из 1С подписываю процедурой ЭлектроннаяПодписьКлиент.Подписать(). Я уверен, что ошибка в формировании и канонизации запроса. Так как я не эксперт в SOAP и не могу отладить эту подключаемую компоненту, которая высчитывает хэш, подписывает и тд, мне ничего не остается, кроме как обратиться к Вам. Буду благодарен за любые подсказки. Сформированный запрос (Текст кроме Body, DigestValue, SignatureValue, предопределен, пробелы, лишние символы удаляю перед выполнением процедур):
 
  <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">    <soap:Header>       <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1">          <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="SIG-3">             <SignedInfo>                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />                <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost3410" />                <Reference URI="#Body">                   <ds:Transforms>                      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">                         <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="" />                      </ds:Transform>                   </ds:Transforms>                   <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />                   <DigestValue>uiXqXQARC1P75DygchfugNJ2r2s=</DigestValue>                </Reference>             </SignedInfo>             <SignatureValue xmlns="http://www.w3.org/2000/09/xmldsig#">uwtRkk2FLe06/FmVP4HjRdmnWOTEbWc68eUpW9W/HJXqK8Kq3SvYfro5im67avtr6ZXqOfHwe9i7dKBtzBPksw==</SignatureValue>             <ds:KeyInfo Id="KI-2FF65E0C7C9E1562EF14177702709883">                <wsse:SecurityTokenReference wsu:Id="STR-2FF65E0C7C9E1562EF14177702709883">                   <ds:X509Data>                      <ds:X509IssuerSerial>                         <ds:X509IssuerName>CN=JSA, O=JSA, C=RU, L=oskol, ST=BEL</ds:X509IssuerName>                         <ds:X509SerialNumber>3580310541514603215</ds:X509SerialNumber>                      </ds:X509IssuerSerial>                   </ds:X509Data>                </wsse:SecurityTokenReference>             </ds:KeyInfo>          </ds:Signature>          <wsse:UsernameToken wsu:Id="UsernameToken-2FF65E0C7C9E1562EF14177702709883">             <wsse:Username>login_lom</wsse:Username>             <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">sadfdsf12</wsse:Password>          </wsse:UsernameToken>       </wsse:Security>    </soap:Header>    <soap:Body xmlns:v2="http://www.bpc.ru/alfabank/2014/12/emoneytransfer/v2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body">       <v2:makeTransferExtended xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">          <wallet>00000000</wallet>          <comment>Transfer</comment>          <customerInfo>             <sourceIp>10.53.6.36</sourceIp>             <fullName>OrgName</fullName>             <address>                <country>RUS</country>                <city>SPB</city>                <postalCode>309551</postalCode>                <addressLine>Pussican Street One</addressLine>             </address>          </customerInfo>          <recepientInfo>             <fullName>Ivan Ivanov</fullName>          </recepientInfo>          <idValueDestination>             <typevalue>lomnlmk</typevalue>             <idvalue>login17html_lomnlmk_2366481490</idvalue>          </idValueDestination>          <amount>             <requested>55555.6</requested>             <fee>0</fee>             <currency>810</currency>          </amount>          <id>99611</id>          <type>99999</type>          <time>2019-12-27T08:00:00.000-01:00</time>       </v2:makeTransferExtended>    </soap:Body> </soap:Envelope>
 
Параметры XMLDSig:
 
 ПараметрыXMLDSig = ЭлектроннаяПодписьКлиентСервер.ПараметрыXMLDSig(); 	ПараметрыXMLDSig.XPathSignedInfo = "(//. | //@* |//namespace::*)[ancestor-or-self::*[local-name()='SignedInfo']]"; //(//. | //@* | //namespace::*)[ancestororself::*[local-name()='SignedInfo']] 	ПараметрыXMLDSig.XPathПодписываемыйТег = "(//. | //@* |//namespace::*)[ancestor-or-self::soap:Body]"; 	ПараметрыXMLDSig.ИмяАлгоритмаПодписи = "GOST R 34.10-2001"; 	ПараметрыXMLDSig.OIDАлгоритмаПодписи = "1.2.643.2.2.3"; // ГОСТ R 34.11/34.10-2001 	ПараметрыXMLDSig.ИмяАлгоритмаХеширования = "SHA-1";//"GOST R 34.11-94"; 	ПараметрыXMLDSig.OIDАлгоритмаХеширования = "1.3.14.3.2.26";//"1.2.643.2.2.9";// ГОСТ R 34.11-94 
 
 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                Здравствуйте. Через CAdESCOM.SignedXML попробуйте. Интерфейс  ISignedXMLпсевдокод: Код:
 if (algoOid == "1.2.643.7.1.1.1.1")    // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 256 бит
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256";
    else if (algoOid == "1.2.643.7.1.1.1.2")    // алгоритм подписи ГОСТ Р 34.10-2012 с ключом 512 бит
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-512";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-512";
    else if (algoOid == "1.2.643.2.2.19")   // алгоритм ГОСТ Р 34.10-2001
        signMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
        digestMethod = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
 
 Код:
 oSignedXML.ContentEncoding := CADESCOM_BASE64_TO_BINARY;
oSignedXML.Content := xml в base64
  oSignedXML.SignatureType := CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED;
  oSignedXML.SignatureMethod := signMethod;
  oSignedXML.DigestMethod := digestMethod;
подпись = oSignedXML.Sign(oSigner);
 
    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
         | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
  
	 
	
     | 
    
        
            
		      
                алгоритмы из сертификата можно определить (или сделать настраиваемыми) Код:  
  pubKey  = oSigner.Certificate.PublicKey();
  algo = pubKey.Algorithm;
  algoOid = algo.Value;
 
    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
  
	 
	
     | 
    
        
            
		      
                Автор: Андрей Писарев  Здравствуйте. Через CAdESCOM.SignedXML попробуйте. Интерфейс  ISignedXML Извините за возможно глупый вопрос, но мне надо посчитать хэш для body,записать его в DigestValue, а затем подписать блок SignedInfo. А этот метод подписывает пакет полностью, настройки подписываемых тегов я не нашел в нем. Как его правильно вызвать?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.03.2020(UTC) Сообщений: 1
  
	 
	
     | 
    
        
            
		      
                <ds:X509IssuerSerial> <ds:X509IssuerName>CN=JSA, O=JSA, C=RU, L=oskol, ST=BEL</ds:X509IssuerName> <ds:X509SerialNumber>3580310541514603215</ds:X509SerialNumber> </ds:X509IssuerSerial>
  А Вы сами заполняли этот участок или у Вас при подписании он заполнен был? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 27.12.2019(UTC) Сообщений: 4
  
	 
	
     | 
    
        
            
		      
                Коллеги, добрый день! Поскольку многие из Вас обращаются ко мне с вопросами по поводу этой интеграции, частые ошибки следующие: 1. Неправильный порядок подписи. Подписывать нужно не все сообщение SOAP, а только тэг SignedInfo, предварительно посчитав хэш Body и запихнув его в DigestValue. После этого 1С вернет вам в SignedInfo вашу подпись, вы ее вырезаете и вставляете в итоговое сообщение SOAP. Так же вам нужно отказаться от стандартной каниканолизации сообщения SOAP в 1С и подпихивать на подпись уже грубо говоря вручную каноникализированный шаблон (потребует доработки модуля ЭлектроннаяПодписьСлужебный, функции НачатьПодписание и послеподписиSignedInfo). Процесс каноникализации по факту является удалением пробелов и дополнение тегов. 2. Не все заголовки переданы: Вы должны передавать заголовок SOAPAction, с указанием URL метода, который вы вызываете. Отредактировано пользователем 21 мая 2021 г. 16:27:05(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close