Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.05.2021(UTC) Сообщений: 9   
	 
	
     | 
    
        
            
		      
                Добрый день. Задача - подписать конкретный тег xml документа. Нашел несколько примеров, например тут: https://www.cryptopro.ru...aspx?g=posts&t=11923И для java тут: https://github.com/alfa-...entSignatureExample.javaКод функции: Код:def sign_xmldsig():
    STATEMENT_SIGNATURE_ELEMENT_XPATH=("/*[local-name()='Document' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    +"/*[local-name()='AcctRptgReq' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    +"/*[local-name()='SplmtryData' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    +"/*[local-name()='Envlp' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    +"/*[local-name()='SngtrSt' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']")
    try:
        doc = etree.parse('/home/py-app/xml_for_sign.xml', etree.XMLParser(encoding='ISO-8859-1', ns_clean=True, recover=True))
        store = pycades.Store()
        store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
        certs = store.Certificates
        signer = pycades.Signer()
        signer.Certificate = certs.Item(1)     
        signer.CheckCertificate = True
        signer.KeyPin='...'               
        signedXML = pycades.SignedXML()
        signedXML.Content = etree.tostring(doc, pretty_print=False, encoding='unicode') #xml_data
        #signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED | pycades.CADESCOM_XADES_BES
        signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE | pycades.CADESCOM_XADES_BES
        signature = signedXML.Sign(signer) #, STATEMENT_SIGNATURE_ELEMENT_XPATH)
        
        return web.Response(text=signature, content_type="text/xml")
    except Exception as ex:
		print(ex) 
 Получаю ошибку: 'Cannot find object or property. (0x80092004)' Если добавляю XPATH в метод Sign signedXML.Sign(signer, STATEMENT_SIGNATURE_ELEMENT_XPATH) Получаю ошибку: 'The parameter is incorrect. (0x80070057)' xml: Код:<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.060.001.03" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <AcctRptgReq>
    <GrpHdr>
      <MsgId>00000000000000000000001</MsgId>
      <CreDtTm>2001-01-01T00:00:00</CreDtTm>
    </GrpHdr>
    <SplmtryData>
      <Envlp>
        <SngtrSt>
        </SngtrSt>
      </Envlp>
    </SplmtryData>
  </AcctRptgReq>
</Document> 
 Подскажите как правильно подписать тег на pycades?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234  Сказал(а) «Спасибо»: 105 раз Поблагодарили: 296 раз в 276 постах
  
	 
	
     | 
    
        
            
		      
                Добрый день. лучше приложите конечную xml подпись которую хотите получить. у вас все выглядит как копипаст. вы пытаетесь подписать по шаблону, но не передаете шаблон. никаких узлов нет. но вы пытаетесь их найти. и.... не находите    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.05.2021(UTC) Сообщений: 9   
	 
	
     | 
    
        
            
		      
                Спасибо за ответ. Цитата:лучше приложите конечную xml подпись которую хотите получить.  XML полностью. Код:<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.060.001.03" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <AcctRptgReq>
    <GrpHdr>
      <MsgId>00000000000000000000001</MsgId>
      <CreDtTm>2001-01-01T00:00:00</CreDtTm>
    </GrpHdr>
    <RptgReq>
      <Id>00000000000000000000001</Id>
      <ReqdMsgNmId>HMQSTASCF</ReqdMsgNmId>
      <Acct>
        <Id>
          <Othr>
            <Id>40702810901300013000</Id>
          </Othr>
        </Id>
      </Acct>
      <AcctOwnr>
        <Pty>
          <Nm>ООО Рога и Копыта</Nm>
        </Pty>
      </AcctOwnr>
      <RptgPrd>
        <FrToDt>
          <FrDt>2001-01-01</FrDt>
          <ToDt>2001-01-01</ToDt>
        </FrToDt>
        <FrToTm>
          <FrTm>00:00:00</FrTm>
          <ToTm>24:00:00</ToTm>
        </FrToTm>
        <Tp>ALLL</Tp>
      </RptgPrd>
    </RptgReq>
    <SplmtryData>
      <Envlp>
        <SngtrSt>
        </SngtrSt>
      </Envlp>
    </SplmtryData>
  </AcctRptgReq>
</Document> 
 Взял  отсюда как пример подписи для банка, она тестовая но рабочие будут аналогичные. Цитата:вы пытаетесь подписать по шаблону, но не передаете шаблон  Как указать шаблон?  В документации видел только скудное описание метода sign с параметром xpath и установкой SignatureType=TEMPLATE. Честно говоря я думал что xpath это и есть темплайт.  Может есть более подробное описание подписи по шаблону ? Отредактировано пользователем 28 мая 2021 г. 10:06:45(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.05.2021(UTC) Сообщений: 9   
	 
	
     | 
    
        
            
		      
                Еще раз прошерстил форум, нашел похожую ситуацию с Альфа банком на PHP. https://www.cryptopro.ru...aspx?g=posts&t=11568Там закончилось тем что:  "Плагин не умеет делать <ds:Transforms><ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/> такой трансформ." Подскажите, это проблема с pycades? Приведу полностью функция на python. В коде перепробовал разные xpath, все они прошли проверку на  http://xpather.com/ для примера xml файла (приводил выше). Код:
from    lxml import etree
import  datetime
import  pycades
def sign_xmldsig():
    STATEMENT_SIGNATURE_ELEMENT_XPATH="//*[local-name()='SngtrSt' and position()=last()]" 
                                    #'//SngtrSt[1]'
                                    #"/*[local-name()='Document' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']/*[local-name()='AcctRptgReq']/*[local-name()='SplmtryData']/*[local-name()='Envlp']"
                                    # "/*[local-name()='Document' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    # +"/*[local-name()='AcctRptgReq']")
                                    # +"/*[local-name()='SplmtryData' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    # +"/*[local-name()='Envlp' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']"
                                    # +"/*[local-name()='SngtrSt' and namespace-uri()='urn:iso:std:iso:20022:tech:xsd:camt.060.001.03']")
    try:
        doc = etree.parse('/home/py-app/xml_for_sign.xml', etree.XMLParser(encoding='ISO-8859-1', ns_clean=True, recover=True))
        store = pycades.Store()
        store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
        certs = store.Certificates
        
        signer = pycades.Signer()
        signer.Certificate = certs.Item(1)
        signer.CheckCertificate = True
        signer.KeyPin=''              
        signedXML = pycades.SignedXML()
        print(etree.tostring(doc, pretty_print=False, encoding='unicode'))
        signedXML.Content = etree.tostring(doc, pretty_print=False, encoding='unicode')
        signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE | pycades.CADESCOM_XADES_BES
        signature = signedXML.Sign(signer, STATEMENT_SIGNATURE_ELEMENT_XPATH)
        return signature
    except Exception as ex:
       print(ex)
 
 Получаю ошибку : 'The parameter is incorrect. (0x80070057)' Отредактировано пользователем 28 мая 2021 г. 7:51:34(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234  Сказал(а) «Спасибо»: 105 раз Поблагодарили: 296 раз в 276 постах
  
	 
	
     | 
    
        
            
		      
                по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми. просто именно эти узлы должны быть пустыми, а также узел с сертификатом. приложите конечную xml которую хотите получить. убираете значения у этих узлов и пробуйте подписать по шаблону    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.05.2021(UTC) Сообщений: 9   
	 
	
     | 
    
        
            
		      
                Цитата:по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми.  Поменял XML на основе ранее подписанного примера от банка: Код:<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.06">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>203_MSG</MsgId>
    </GrpHdr>
    <SplmtryData>
      <Envlp>
        <SgntrSt>
       	  <Signature>
            <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
            <Reference URI="">
              <Transforms>
                <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
              </Transforms>
            <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
            <DigestValue></DigestValue>
            </Reference>
            </SignedInfo>
            <SignatureValue>
            </SignatureValue>
            <KeyInfo>
				    </KeyInfo>
          </Signature>
        </SgntrSt>
      </Envlp>
    </SplmtryData>
  </CstmrCdtTrfInitn>
</Document> 
 Код остался тот же с небольшими изменениями, пробовал и xpath и без него, добавлял signedXML.DigestMethod и signedXML.SignatureMethod. Получаю ошибку:'Cannot find object or property. (0x80092004)' Код:
def sign_xmldsig():
    STATEMENT_SIGNATURE_ELEMENT_XPATH='//Signature[1]'
    try:
        doc = etree.parse('/home/py-app/xml_for_sign.xml', etree.XMLParser(encoding='ISO-8859-1', ns_clean=True, recover=True))
        store = pycades.Store()
        store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
        certs = store.Certificates
        
        signer = pycades.Signer()
        signer.Certificate = certs.Item(1)
        signer.CheckCertificate = True
        signer.KeyPin=''              
        signedXML = pycades.SignedXML()
        #signedXML.DigestMethod = 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256'
        #signedXML.SignatureMethod = 'urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256'
        print(etree.tostring(doc, pretty_print=False, encoding='unicode'))
        signedXML.Content = etree.tostring(doc, pretty_print=False, encoding='unicode')
        signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE
        signature = signedXML.Sign(signer) #, STATEMENT_SIGNATURE_ELEMENT_XPATH)
        return signature
    except Exception as ex:
       print(ex)
 
 Данные ключа на вский случай: 1------- Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2 Subject             : E=ivan@ivan.ivan, CN=Ivanov2, OU=IT, O=OOO, L=Moscow, S=Moscow, C=RU Serial              : 0x12005425174E346F2F7497941B000100542571 SHA1 Hash           : 39babe9fe594b63af141be7969577757ba92ac36 SubjKeyID           : 2a0cd510a8a8a3631533fac0138cb19084a92620 Signature Algorithm : ГОСТ Р 34.11/34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits) Not valid before    : 26/05/2021  10:51:49 UTC Not valid after     : 26/08/2021  11:01:49 UTC PrivateKey Link     : Yes Container           : HDIMAGE\\pfx-55ab.000\C407 Provider Name       : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Provider Info       : Provider Type: 80, Key Spec: 1, Flags: 0x0 CA cert URL         :  http://testca.cryptopro....Test%20Center%202(1).crtOCSP URL            :  http://testca.cryptopro.ru/ocsp/ocsp.srfCDP                 :  http://testca.cryptopro....Test%20Center%202(1).crlОтредактировано пользователем 28 мая 2021 г. 14:03:37(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,234  Сказал(а) «Спасибо»: 105 раз Поблагодарили: 296 раз в 276 постах
  
	 
	
     | 
    
        
            
		      
                такой шаблон подпишется, без xpath Код:<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.06">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>203_MSG</MsgId>
    </GrpHdr>
    <SplmtryData>
      <Envlp>
        <SgntrSt>
       	  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
            <Reference URI="">
              <Transforms>
                <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
              </Transforms>
            <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
            <DigestValue/>
            </Reference>
            </SignedInfo>
            <SignatureValue/>
            <KeyInfo/>
          </Signature>
        </SgntrSt>
      </Envlp>
    </SplmtryData>
  </CstmrCdtTrfInitn>
</Document>  
    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 26.05.2021(UTC) Сообщений: 9   
	 
	
     | 
    
        
            
		      
                Цитата:такой шаблон подпишется, без xpath  Спасибо! подпись работает  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close