Статус: Новичок
Группы: Участники
Зарегистрирован: 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? Версии: debian 10 pycades 0.1.22769
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
Автор: Dmitriy32546 Добрый день. Задача - подписать конкретный тег 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? Версии: debian 10 pycades 0.1.22769 дубликат |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2021(UTC) Сообщений: 3
|
Здравствуйте! Подскажите, пожалуйста, как найти сертификат в хранилище методом Find? Что ему надо передать? Цитата:cert = certs.Find(). И почему, когда делаю: Цитата:store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_OTHER_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED) на выходе получаю один сертификат в хранилище, когда в хранилище AddressBook ничего нет.
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 103 Откуда: Москва Сказал(а) «Спасибо»: 7 раз Поблагодарили: 34 раз в 25 постах
|
Автор: jacob_levit Здравствуйте! Подскажите, пожалуйста, как найти сертификат в хранилище методом Find? Что ему надо передать? Цитата:cert = certs.Find(). И почему, когда делаю: Цитата:store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_OTHER_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED) на выходе получаю один сертификат в хранилище, когда в хранилище AddressBook ничего нет. Добрый день! 1) Параметры аналогичны методу ICertificates2::Find. В этом примере аналогичный код для javascript. 2) Вы открываете хранилище CADESCOM_CONTAINER_STORE, который открывает все сертификаты с привязкой к закрытому ключу. При этом он может находиться не в хранилище AddressBook.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2021(UTC) Сообщений: 3
|
Цитата:Добрый день! 1) Параметры аналогичны методу ICertificates2::Find. В этом примере аналогичный код для javascript. 2) Вы открываете хранилище CADESCOM_CONTAINER_STORE, который открывает все сертификаты с привязкой к закрытому ключу. При этом он может находиться не в хранилище AddressBook. Добрый день! Спасибо за помощь. 1. А параметры поиска нельзя комбинировать? Например, найти сертификат по ISSUER_NAME и ROOT_NAME? 2. И ещё пару вопросиков, если позволите... метод Find возвращает объект: Цитата:<pycades.Certificates object> Как обратиться к его полям? Например, проверить, то ли он вернул, правильный сертификат ли нашёл? 3. Как подписать или зашифровать файл? В примерах только текстовые строки. Отредактировано пользователем 22 июля 2021 г. 13:55:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 103 Откуда: Москва Сказал(а) «Спасибо»: 7 раз Поблагодарили: 34 раз в 25 постах
|
Автор: jacob_levit Цитата:Добрый день! 1) Параметры аналогичны методу ICertificates2::Find. В этом примере аналогичный код для javascript. 2) Вы открываете хранилище CADESCOM_CONTAINER_STORE, который открывает все сертификаты с привязкой к закрытому ключу. При этом он может находиться не в хранилище AddressBook. Добрый день! Спасибо за помощь. 1. А параметры поиска нельзя комбинировать? Например, найти сертификат по ISSUER_NAME и ROOT_NAME? 2. И ещё пару вопросиков, если позволите... метод Find возвращает объект: Цитата:<pycades.Certificates object> Как обратиться к его полям? Например, проверить, то ли он вернул, правильный сертификат ли нашёл? 3. Как подписать или зашифровать файл? В примерах только текстовые строки. 1. Find возвращает объект Certificates. Можете последовательно 2 раза вызвать, сперва отобрать по ISSUER_NAME, потом по ROOT_NAME. 2. Здесь документация на объект Certificates, можете проверить количество найденных сертификатов и перебрать все. 3. Специального интерфейса для работы с файлами нет, единственный вариант сконвертировать содержимое в BASE64 и работать как со строкой. Пример для javascript.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2021(UTC) Сообщений: 3
|
Автор: Ситдиков Денис 1. Find возвращает объект Certificates. Можете последовательно 2 раза вызвать, сперва отобрать по ISSUER_NAME, потом по ROOT_NAME. 2. Здесь документация на объект Certificates, можете проверить количество найденных сертификатов и перебрать все. 3. Специального интерфейса для работы с файлами нет, единственный вариант сконвертировать содержимое в BASE64 и работать как со строкой. Пример для javascript. Спасибо ещё раз за ответы. 1. А можно выбрать какой-нибудь критерий, по которому можно однозначно идентифицировать сертификат? Например, его серийный номер. В метод Find что-то не передаётся такой параметр как серийный номер сертификата. 3. А если файл размером больше, чем оперативная память, то как быть? Извините за нубские вопросы. Отредактировано пользователем 22 июля 2021 г. 15:16:47(UTC)
| Причина: Не указана
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 103 Откуда: Москва Сказал(а) «Спасибо»: 7 раз Поблагодарили: 34 раз в 25 постах
|
Автор: jacob_levit Автор: Ситдиков Денис 1. Find возвращает объект Certificates. Можете последовательно 2 раза вызвать, сперва отобрать по ISSUER_NAME, потом по ROOT_NAME. 2. Здесь документация на объект Certificates, можете проверить количество найденных сертификатов и перебрать все. 3. Специального интерфейса для работы с файлами нет, единственный вариант сконвертировать содержимое в BASE64 и работать как со строкой. Пример для javascript. Спасибо ещё раз за ответы. 1. А можно выбрать какой-нибудь критерий, по которому можно однозначно идентифицировать сертификат? Например, его серийный номер. В метод Find что-то не передаётся такой параметр как серийный номер сертификата. 3. А если файл размером больше, чем оперативная память, то как быть? Извините за нубские вопросы. 1. Certificate.Thumbprint2. Для шифрования есть методы CPEnvelopedData.StreamEncrypt/StreamDecrypt. Для подписи обычно используется отделенная подпись по хэш-значению.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.07.2021(UTC) Сообщений: 3
|
Добрый день Возможно как-то самому библиотеку развернуть на винде? Отредактировано пользователем 3 августа 2021 г. 10:38:25(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close