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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline egow2806  
#1 Оставлено : 27 марта 2025 г. 9:41:38(UTC)
egow2806

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

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

Сказал(а) «Спасибо»: 26 раз
Поблагодарили: 1 раз в 1 постах
Добрый день. Столкнулся со сложностью в подписании XML - файла используя pycades или cryptcp.

Нужно подписать xml присоединенной подписью в формате pkcs7 в кодировке der:

```
Запрос осуществляется путем отправки XML-документа в кодировке Windows-1251 с присоединенной усиленной электронной подписью PKCS7/DER методом POST.
```

Пытался сделать подпись разными вариантами:

через pycades перебирал разные связки .SignatureType:

```
import pycades
import base64

store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Certificates with private key not found"

signer = pycades.Signer()
signer.Certificate = certs.Item(1)
signer.CheckCertificate = True
signer.KeyPin='********************************'

content_to_sign = base64.b64encode(open('test.xml', "rb").read()).decode("utf-8")

signedXML = pycades.SignedXML()
signedXML.Content = content_to_sign
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED | pycades.CADESCOM_XADES_BES
signature = signedXML.Sign(signer)

signedXML.Verify(signature)

decoded_data = base64.b64decode(signature).decode('utf-8')

# Сохраняем XML-строку в файл
with open("test.xml", "w", encoding="windows-1251") as xml_file:
xml_file.write(decoded_data)
```

через cryptcp:/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ******************* -der -nochain -cert -norev "test.xml" "test.xml", так как ответ от партнера приходит в таком формате...


Но все подписи, которые сделал - не подходят, подскажите пожалуйста, как можно сформировать данную подпись для xml. Спасибо.

Отредактировано пользователем 27 марта 2025 г. 9:43:09(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 27 марта 2025 г. 11:03:27(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: egow2806 Перейти к цитате
Добрый день. Столкнулся со сложностью в подписании XML - файла используя pycades или cryptcp.

Нужно подписать xml присоединенной подписью в формате pkcs7 в кодировке der:

```
Запрос осуществляется путем отправки XML-документа в кодировке Windows-1251 с присоединенной усиленной электронной подписью PKCS7/DER методом POST.
```

Пытался сделать подпись разными вариантами:

через pycades перебирал разные связки .SignatureType:

```
import pycades
import base64

store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Certificates with private key not found"

signer = pycades.Signer()
signer.Certificate = certs.Item(1)
signer.CheckCertificate = True
signer.KeyPin='********************************'

content_to_sign = base64.b64encode(open('test.xml', "rb").read()).decode("utf-8")

signedXML = pycades.SignedXML()
signedXML.Content = content_to_sign
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED | pycades.CADESCOM_XADES_BES
signature = signedXML.Sign(signer)

signedXML.Verify(signature)

decoded_data = base64.b64decode(signature).decode('utf-8')

# Сохраняем XML-строку в файл
with open("test.xml", "w", encoding="windows-1251") as xml_file:
xml_file.write(decoded_data)
```

через cryptcp:/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ******************* -der -nochain -cert -norev "test.xml" "test.xml", так как ответ от партнера приходит в таком формате...


Но все подписи, которые сделал - не подходят, подскажите пожалуйста, как можно сформировать данную подпись для xml. Спасибо.



Здравствуйте.

В требованиях указано присоединенная, а не встроенная (XMLDSig\XAdES).

Соответственно, вместо SignedXML необходимо использовать CPSignedData.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 27.03.2025(UTC)
Offline Андрей *  
#3 Оставлено : 27 марта 2025 г. 11:26:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
https://docs.cryptopro.r...ples/pycades-sign-verify
signedData = pycades.SignedData()

+ указать, что закодировано в base64
+ передать в base64 на подписание, прочитанное из файла
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 27.03.2025(UTC)
Offline Андрей *  
#4 Оставлено : 27 марта 2025 г. 11:31:16(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Код:

....

detached = False
cadesType = pycades.CADESCOM_CADES_BES
content = строка в base64

signedData = pycades.SignedData()
signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
signedData.Content = content
signature = signedData.SignCades(signer, cadesType, detached)

...



в signature - будет base64 строка, её декодировать - получится бинарный файл, который отправить в POST.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 27.03.2025(UTC)
Offline egow2806  
#5 Оставлено : 27 марта 2025 г. 16:12:32(UTC)
egow2806

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

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

Сказал(а) «Спасибо»: 26 раз
Поблагодарили: 1 раз в 1 постах
Спасибо, в итоге выяснили что ошибка была в curl запросе...
Подпись реализовал через: cryptcp:/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ******************* -der -nochain -cert -norev "test.xml" "test.xml.sig"

пробовал пример pycades, но почему-то ругался на кодировку... не совсем понимаю как в DER сделать через pycades: в signature - будет base64 строка, её декодировать - получится бинарный файл

Отредактировано пользователем 27 марта 2025 г. 16:47:49(UTC)  | Причина: Не указана

Offline Андрей *  
#6 Оставлено : 27 марта 2025 г. 16:31:43(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: egow2806 Перейти к цитате
Спасибо, в итоге выяснили что ошибка была в curl запросе...
Подпись реализовал через: cryptcp:/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint ******************* -der -nochain -cert -norev "test.xml" "test.xml"

пробовал пример pycades, но почему-то ругался на кодировку... не совсем понимаю как в DER сделать через pycades: в signature - будет base64 строка, её декодировать - получится бинарный файл




Код:
import base64

# Декодируем строку в байты
decoded_bytes = base64.b64decode(signature) 
# Записываем бинарные данные в файл
with open("output.bin", "wb") as file:
    file.write(decoded_bytes)  


так?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 27.03.2025(UTC)
Offline egow2806  
#7 Оставлено : 27 марта 2025 г. 16:56:58(UTC)
egow2806

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

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

Сказал(а) «Спасибо»: 26 раз
Поблагодарили: 1 раз в 1 постах
Супер, спасибо, вот так получилось)

```
decoded_data = base64.b64decode(signature)

with open("test.xml.sig", "wb") as xml_file:
xml_file.write(decoded_data)

```
Offline Андрей *  
#8 Оставлено : 27 марта 2025 г. 17:01:26(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: egow2806 Перейти к цитате
Супер, спасибо, вот так получилось)

```
decoded_data = base64.b64decode(signature)

with open("test.xml.sig", "wb") as xml_file:
xml_file.write(decoded_data)

```


а зачем такое наименование ... xml_file,

там ASN.1 (DER)... бинарный файл, присоединенная ЭП, внутри закодирован исходный файл (xml).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 27.03.2025(UTC)
Offline egow2806  
#9 Оставлено : 27 марта 2025 г. 17:04:18(UTC)
egow2806

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

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

Сказал(а) «Спасибо»: 26 раз
Поблагодарили: 1 раз в 1 постах
осталось от старого кода...

а еще подскажите пожалуйста, а возможно ли как-то curl, который запускаю через консоль: /opt/cprocsp/bin/amd64/curl реализовать так же например через pycades или каки-то есть другие варианты?
Спасибо.
Offline Андрей *  
#10 Оставлено : 27 марта 2025 г. 17:18:34(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: egow2806 Перейти к цитате
осталось от старого кода...

а еще подскажите пожалуйста, а возможно ли как-то curl, который запускаю через консоль: /opt/cprocsp/bin/amd64/curl реализовать так же например через pycades или каки-то есть другие варианты?
Спасибо.


а там ГОСТ TLS или что требуется... ?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.