Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

9 Страницы«<789
Опции
К последнему сообщению К первому непрочитанному
Offline Dmitriy32546  
#161 Оставлено : 26 мая 2021 г. 19:51:50(UTC)
Dmitriy32546

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.05.2021(UTC)
Сообщений: 6
Мужчина

Добрый день.
Задача - подписать конкретный тег 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
Offline Санчир Момолдаев  
#162 Оставлено : 27 мая 2021 г. 13:22:33(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 753
Российская Федерация

Сказал(а) «Спасибо»: 63 раз
Поблагодарили: 157 раз в 153 постах
Автор: 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


дубликат
Техническую поддержку оказываем тут
Наша база знаний
Offline jacob_levit  
#163 Оставлено : 21 июля 2021 г. 15:56:00(UTC)
jacob_levit

Статус: Новичок

Группы: Участники
Зарегистрирован: 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 ничего нет.
Offline Ситдиков Денис  
#164 Оставлено : 22 июля 2021 г. 11:30:57(UTC)
Ситдиков Денис

Статус: Активный участник

Группы: Участники
Зарегистрирован: 01.03.2017(UTC)
Сообщений: 73
Российская Федерация
Откуда: Москва

Поблагодарили: 13 раз в 12 постах
Автор: 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.
Offline jacob_levit  
#165 Оставлено : 22 июля 2021 г. 13:11:23(UTC)
jacob_levit

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Ситдиков Денис  
#166 Оставлено : 22 июля 2021 г. 14:24:12(UTC)
Ситдиков Денис

Статус: Активный участник

Группы: Участники
Зарегистрирован: 01.03.2017(UTC)
Сообщений: 73
Российская Федерация
Откуда: Москва

Поблагодарили: 13 раз в 12 постах
Автор: 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.
Offline jacob_levit  
#167 Оставлено : 22 июля 2021 г. 15:12:53(UTC)
jacob_levit

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Ситдиков Денис  
#168 Оставлено : 22 июля 2021 г. 16:09:34(UTC)
Ситдиков Денис

Статус: Активный участник

Группы: Участники
Зарегистрирован: 01.03.2017(UTC)
Сообщений: 73
Российская Федерация
Откуда: Москва

Поблагодарили: 13 раз в 12 постах
Автор: jacob_levit Перейти к цитате
Автор: Ситдиков Денис Перейти к цитате

1. Find возвращает объект Certificates. Можете последовательно 2 раза вызвать, сперва отобрать по ISSUER_NAME, потом по ROOT_NAME.
2. Здесь документация на объект Certificates, можете проверить количество найденных сертификатов и перебрать все.
3. Специального интерфейса для работы с файлами нет, единственный вариант сконвертировать содержимое в BASE64 и работать как со строкой. Пример для javascript.

Спасибо ещё раз за ответы.
1. А можно выбрать какой-нибудь критерий, по которому можно однозначно идентифицировать сертификат? Например, его серийный номер. В метод Find что-то не передаётся такой параметр как серийный номер сертификата.
3. А если файл размером больше, чем оперативная память, то как быть?
Извините за нубские вопросы.


1. Certificate.Thumbprint
2. Для шифрования есть методы CPEnvelopedData.StreamEncrypt/StreamDecrypt. Для подписи обычно используется отделенная подпись по хэш-значению.
Offline Андрей *  
#169 Оставлено : 22 июля 2021 г. 16:28:22(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,307
Мужчина
Российская Федерация

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
Автор: jacob_levit Перейти к цитате

3. А если файл размером больше, чем оперативная память, то как быть?
Извините за нубские вопросы.


Подпись файла с использованием FileAPI и чтением файла по частям
Техническую поддержку оказываем тут
Наша база знаний
Offline Emin Aliev  
#170 Оставлено : 27 июля 2021 г. 17:45:23(UTC)
Emin Aliev

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.07.2021(UTC)
Сообщений: 1

Добрый день
Как на pycades снять ЭЦП c помощью сертификата?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
9 Страницы«<789
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.