Atom Лента - Форум КриптоПро - Тема:Ошибка pycades подпись XML по шаблону - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:Oshibkapycadespodpis'XMLposhablonu-10:1Copyright 2024 Форум КриптоПро2024-03-19T05:54:26Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruDmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546Dmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546Санчир Момолдаевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=50915&name=Санчир МомолдаевDmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546Санчир Момолдаевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=50915&name=Санчир МомолдаевDmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546Dmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546Санчир Момолдаевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=50915&name=Санчир МомолдаевDmitriy32546https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59482&name=Dmitriy32546YetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid125106:1Ошибка pycades подпись XML по шаблону<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>такой шаблон подпишется, без xpath</div></div><br />Спасибо! подпись работает</td></tr></table>2021-05-31T11:38:21+03:002021-05-31T11:38:21+03:00Dmitriy32546<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>такой шаблон подпишется, без xpath</div></div><br />Спасибо! подпись работает</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125094:1Ошибка pycades подпись XML по шаблону<table class="content postContainer" width="100%"><tr><td>такой шаблон подпишется, без xpath<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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> </code></pre>
</div></div></td></tr></table>2021-05-29T09:18:45+03:002021-05-29T09:18:45+03:00Санчир Момолдаев<table class="content postContainer" width="100%"><tr><td>такой шаблон подпишется, без xpath<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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> </code></pre>
</div></div></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125086:1Ошибка pycades подпись XML по шаблону<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми.</div></div><br /><br />Поменял XML на основе ранее подписанного примера от банка:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Код остался тот же с небольшими изменениями, пробовал и xpath и без него, добавлял signedXML.DigestMethod и signedXML.SignatureMethod.<br />Получаю ошибку:'Cannot find object or property. (0x80092004)'<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">
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)
</code></pre>
</div></div><br /><br />Данные ключа на вский случай:<br />1-------<br />Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2<br />Subject : E=ivan@ivan.ivan, CN=Ivanov2, OU=IT, O=OOO, L=Moscow, S=Moscow, C=RU<br />Serial : 0x12005425174E346F2F7497941B000100542571<br />SHA1 Hash : 39babe9fe594b63af141be7969577757ba92ac36<br />SubjKeyID : 2a0cd510a8a8a3631533fac0138cb19084a92620<br />Signature Algorithm : ГОСТ Р 34.11/34.10-2001<br />PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)<br />Not valid before : 26/05/2021 10:51:49 UTC<br />Not valid after : 26/08/2021 11:01:49 UTC<br />PrivateKey Link : Yes<br />Container : HDIMAGE\\pfx-55ab.000\C407<br />Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider<br />Provider Info : Provider Type: 80, Key Spec: 1, Flags: 0x0<br />CA cert URL : <a rel="nofollow" href="http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202(1).crt" title="http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202(1).crt">http://testca.cryptopro....Test%20Center%202(1).crt</a><br />OCSP URL : <a rel="nofollow" href="http://testca.cryptopro.ru/ocsp/ocsp.srf" title="http://testca.cryptopro.ru/ocsp/ocsp.srf">http://testca.cryptopro.ru/ocsp/ocsp.srf</a><br />CDP : <a rel="nofollow" href="http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202(1).crl" title="http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202(1).crl">http://testca.cryptopro....Test%20Center%202(1).crl</a></td></tr></table>2021-05-28T14:03:37+03:002021-05-28T14:03:37+03:00Dmitriy32546<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми.</div></div><br /><br />Поменял XML на основе ранее подписанного примера от банка:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Код остался тот же с небольшими изменениями, пробовал и xpath и без него, добавлял signedXML.DigestMethod и signedXML.SignatureMethod.<br />Получаю ошибку:'Cannot find object or property. (0x80092004)'<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">
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)
</code></pre>
</div></div><br /><br />Данные ключа на вский случай:<br />1-------<br />Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2<br />Subject : E=ivan@ivan.ivan, CN=Ivanov2, OU=IT, O=OOO, L=Moscow, S=Moscow, C=RU<br />Serial : 0x12005425174E346F2F7497941B000100542571<br />SHA1 Hash : 39babe9fe594b63af141be7969577757ba92ac36<br />SubjKeyID : 2a0cd510a8a8a3631533fac0138cb19084a92620<br />Signature Algorithm : ГОСТ Р 34.11/34.10-2001<br />PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)<br />Not valid before : 26/05/2021 10:51:49 UTC<br />Not valid after : 26/08/2021 11:01:49 UTC<br />PrivateKey Link : Yes<br />Container : HDIMAGE\\pfx-55ab.000\C407<br />Provider Name : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider<br />Provider Info : Provider Type: 80, Key Spec: 1, Flags: 0x0<br />CA cert URL : <a rel="nofollow" href="http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202(1).crt" title="http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202(1).crt">http://testca.cryptopro....Test%20Center%202(1).crt</a><br />OCSP URL : <a rel="nofollow" href="http://testca.cryptopro.ru/ocsp/ocsp.srf" title="http://testca.cryptopro.ru/ocsp/ocsp.srf">http://testca.cryptopro.ru/ocsp/ocsp.srf</a><br />CDP : <a rel="nofollow" href="http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202(1).crl" title="http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202(1).crl">http://testca.cryptopro....Test%20Center%202(1).crl</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125082:1Ошибка pycades подпись XML по шаблону<table class="content postContainer" width="100%"><tr><td>по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми.<br />просто именно эти узлы должны быть пустыми, а также узел с сертификатом.<br />приложите конечную xml которую хотите получить. убираете значения у этих узлов и пробуйте подписать по шаблону</td></tr></table>2021-05-28T13:13:46+03:002021-05-28T13:13:46+03:00Санчир Момолдаев<table class="content postContainer" width="100%"><tr><td>по шаблону означает что вы подаете xml с уже сформированными узлами digest value signature value и другими необходимыми.<br />просто именно эти узлы должны быть пустыми, а также узел с сертификатом.<br />приложите конечную xml которую хотите получить. убираете значения у этих узлов и пробуйте подписать по шаблону</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125074:1Ошибка pycades подпись XML по шаблону<table class="content postContainer_Alt" width="100%"><tr><td>Еще раз прошерстил форум, нашел похожую ситуацию с Альфа банком на PHP.<br /><a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11568" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11568">https://www.cryptopro.ru...aspx?g=posts&t=11568</a><br /><br />Там закончилось тем что: <br />"Плагин не умеет делать <ds:Transforms><ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/> такой трансформ."<br /><br />Подскажите, это проблема с pycades?<br /><br />Приведу полностью функция на python.<br />В коде перепробовал разные xpath, все они прошли проверку на <a rel="nofollow" href="http://xpather.com/" title="http://xpather.com/">http://xpather.com/</a> для примера xml файла (приводил выше).<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">
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)
</code></pre>
</div></div><br /><br /><br />Получаю ошибку :<br />'The parameter is incorrect. (0x80070057)'</td></tr></table>2021-05-28T07:51:34+03:002021-05-28T07:51:34+03:00Dmitriy32546<table class="content postContainer_Alt" width="100%"><tr><td>Еще раз прошерстил форум, нашел похожую ситуацию с Альфа банком на PHP.<br /><a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11568" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11568">https://www.cryptopro.ru...aspx?g=posts&t=11568</a><br /><br />Там закончилось тем что: <br />"Плагин не умеет делать <ds:Transforms><ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/> такой трансформ."<br /><br />Подскажите, это проблема с pycades?<br /><br />Приведу полностью функция на python.<br />В коде перепробовал разные xpath, все они прошли проверку на <a rel="nofollow" href="http://xpather.com/" title="http://xpather.com/">http://xpather.com/</a> для примера xml файла (приводил выше).<br /><br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">
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)
</code></pre>
</div></div><br /><br /><br />Получаю ошибку :<br />'The parameter is incorrect. (0x80070057)'</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125063:1Ошибка pycades подпись XML по шаблону<table class="content postContainer" width="100%"><tr><td>Спасибо за ответ.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>лучше приложите конечную xml подпись которую хотите получить.</div></div><br /><br />XML полностью.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Взял <a rel="nofollow" href="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/resources/statement_example.txt" title="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/resources/statement_example.txt">отсюда </a>как пример подписи для банка, она тестовая но рабочие будут аналогичные.<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>вы пытаетесь подписать по шаблону, но не передаете шаблон</div></div><br />Как указать шаблон? <br />В документации видел только скудное описание метода sign с параметром xpath и установкой SignatureType=TEMPLATE. Честно говоря я думал что xpath это и есть темплайт.<br /> <br />Может есть более подробное описание подписи по шаблону ?</td></tr></table>2021-05-28T10:06:45+03:002021-05-28T10:06:45+03:00Dmitriy32546<table class="content postContainer" width="100%"><tr><td>Спасибо за ответ.<br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>лучше приложите конечную xml подпись которую хотите получить.</div></div><br /><br />XML полностью.<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Взял <a rel="nofollow" href="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/resources/statement_example.txt" title="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/resources/statement_example.txt">отсюда </a>как пример подписи для банка, она тестовая но рабочие будут аналогичные.<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>вы пытаетесь подписать по шаблону, но не передаете шаблон</div></div><br />Как указать шаблон? <br />В документации видел только скудное описание метода sign с параметром xpath и установкой SignatureType=TEMPLATE. Честно говоря я думал что xpath это и есть темплайт.<br /> <br />Может есть более подробное описание подписи по шаблону ?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125060:1Ошибка pycades подпись XML по шаблону<table class="content postContainer_Alt" width="100%"><tr><td>Добрый день.<br />лучше приложите конечную xml подпись которую хотите получить.<br />у вас все выглядит как копипаст.<br />вы пытаетесь подписать по шаблону, но не передаете шаблон.<br />никаких узлов нет. но вы пытаетесь их найти. и.... не находите</td></tr></table>2021-05-27T13:20:00+03:002021-05-27T13:20:00+03:00Санчир Момолдаев<table class="content postContainer_Alt" width="100%"><tr><td>Добрый день.<br />лучше приложите конечную xml подпись которую хотите получить.<br />у вас все выглядит как копипаст.<br />вы пытаетесь подписать по шаблону, но не передаете шаблон.<br />никаких узлов нет. но вы пытаетесь их найти. и.... не находите</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid125059:1Ошибка pycades подпись XML по шаблону<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Задача - подписать конкретный тег xml документа.<br />Нашел несколько примеров, например тут:<br /><a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11923" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11923">https://www.cryptopro.ru...aspx?g=posts&t=11923</a><br /><br />И для java тут:<br /><a rel="nofollow" href="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/java/ru/alfabank/iso20022/StatementSignatureExample.java" title="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/java/ru/alfabank/iso20022/StatementSignatureExample.java">https://github.com/alfa-...entSignatureExample.java</a><br /><br />Код функции:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">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)</code></pre>
</div></div><br /><br />Получаю ошибку:<br />'Cannot find object or property. (0x80092004)'<br /><br />Если добавляю XPATH в метод Sign<br />signedXML.Sign(signer, STATEMENT_SIGNATURE_ELEMENT_XPATH)<br /><br />Получаю ошибку:<br />'The parameter is incorrect. (0x80070057)'<br /><br />xml:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Подскажите как правильно подписать тег на pycades?<br /></td></tr></table>2021-05-27T12:23:40+03:002021-05-27T12:23:40+03:00Dmitriy32546<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Задача - подписать конкретный тег xml документа.<br />Нашел несколько примеров, например тут:<br /><a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11923" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=11923">https://www.cryptopro.ru...aspx?g=posts&t=11923</a><br /><br />И для java тут:<br /><a rel="nofollow" href="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/java/ru/alfabank/iso20022/StatementSignatureExample.java" title="https://github.com/alfa-laboratory/iso20022-signature/blob/master/src/main/java/ru/alfabank/iso20022/StatementSignatureExample.java">https://github.com/alfa-...entSignatureExample.java</a><br /><br />Код функции:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-python">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)</code></pre>
</div></div><br /><br />Получаю ошибку:<br />'Cannot find object or property. (0x80092004)'<br /><br />Если добавляю XPATH в метод Sign<br />signedXML.Sign(signer, STATEMENT_SIGNATURE_ELEMENT_XPATH)<br /><br />Получаю ошибку:<br />'The parameter is incorrect. (0x80070057)'<br /><br />xml:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-markup"><?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></code></pre>
</div></div><br /><br />Подскажите как правильно подписать тег на pycades?<br /></td></tr></table>