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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Павел Нагибин  
#1 Оставлено : 25 июля 2025 г. 17:46:49(UTC)
Павел Нагибин

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

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

Сказал(а) «Спасибо»: 5 раз
Добрый день.
Работаю над программной реализацией проверки подписи.
Использую Python и cades = win32com.client.Dispatch('CAdESCOM.CadesSignedData').
Подпись, которая была выдана ФНС удается успешно проверить.
Подпись, которая была выдана ЦБ не удается проверить.
Подписи имеют разные формат.
Подпись ФНС в виде base64 строки.
Подпись ЦБ не понял в каком формате.
Полагаю, что я неправильно передаю подпись в объект CAdESCOM.CadesSignedData.
Примеры подписей: podpisi.zip (7kb) загружен 2 раз(а)..

Пример реализации на Python:
Цитата:

cades = win32com.client.Dispatch('CAdESCOM.CadesSignedData')
with open(document_path, 'rb') as f:
content = f.read()
with open(signature_path, 'rb') as f:
signature = f.read()
cades.ContentEncoding = 0 # raw binary
cades.Content = content
cades.VerifyCades(signature, 1, True)


Оба файла: сам документ и подпись передаю как бинарные.
При попытке проверить подпись ЦБ возвращается ошибка именно на строке cades.VerifyCades(signature, 1, True):
"Signature verification failed: (-2147352567, 'Ошибка.', (0, 'CAdESCOM.CadesSignedData.1', 'Объект или свойство не найдено.', None, 0, -2146885628), None)"

Но с помощью ПО "Инструменты КриптоПро" подпись ЦБ удается проверить успешно.

Если кто сталкивался с похожей ситуацией, подскажите пожалуйста.

Отредактировано пользователем 25 июля 2025 г. 17:48:29(UTC)  | Причина: Не указана

Online Андрей *  
#2 Оставлено : 25 июля 2025 г. 18:05:02(UTC)
Андрей *

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

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

Сказал «Спасибо»: 582 раз
Поблагодарили: 2314 раз в 1812 постах
Здравствуйте.

Проблема в типе подписи: pkcs7 у ЦБ, CAdES BES у ФНС.

в коде же указано BES:
cades.VerifyCades(signature, 1, True)

Необходимо внимательно смотреть в параметры VerifyCades

Перечисление CADESCOM_CADES_TYPE

CADESCOM_PKCS7_TYPE Тип подписи PKCS7. 0xffff

а передаётся 1 = CADESCOM_CADES_BES Тип подписи CAdES BES. 0x01
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Андрей * за этот пост.
nickm оставлено 25.07.2025(UTC), Павел Нагибин оставлено 28.07.2025(UTC)
Offline Павел Нагибин  
#3 Оставлено : 25 июля 2025 г. 18:28:31(UTC)
Павел Нагибин

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
Здравствуйте.

Проблема в типе подписи: pkcs7 у ЦБ, CAdES BES у ФНС.

в коде же указано BES:
cades.VerifyCades(signature, 1, True)

Необходимо внимательно смотреть в параметры VerifyCades

Перечисление CADESCOM_CADES_TYPE

CADESCOM_PKCS7_TYPE Тип подписи PKCS7. 0xffff

а передаётся 1 = CADESCOM_CADES_BES Тип подписи CAdES BES. 0x01


Спасибо за совет, поэкспериментирую еще раз, но я уже попробовал со всеми возможными типами подписи, пока результат тот же.
Offline Новожилова Елена  
#4 Оставлено : 25 июля 2025 г. 18:50:05(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 931
Женщина
Откуда: Крипто-Про

Поблагодарили: 107 раз в 99 постах
Здравствуйте!

> Подпись ЦБ не понял в каком формате.
> Оба файла: сам документ и подпись передаю как бинарные.

Посмотрите ещё про передачу бинарных данных https://docs.cryptopro.r...es/usage/working-capicom
thanks 2 пользователей поблагодарили Новожилова Елена за этот пост.
Андрей * оставлено 25.07.2025(UTC), Павел Нагибин оставлено 28.07.2025(UTC)
Offline Павел Нагибин  
#5 Оставлено : 28 июля 2025 г. 14:22:57(UTC)
Павел Нагибин

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Новожилова Елена Перейти к цитате
Здравствуйте!

> Подпись ЦБ не понял в каком формате.
> Оба файла: сам документ и подпись передаю как бинарные.

Посмотрите ещё про передачу бинарных данных https://docs.cryptopro.r...es/usage/working-capicom


Елена, спасибо за совет.
Пробую передать с свойство Content данные в формате байтовой последовательности получаю ошибку:
Код:
"Signature verification failed: Property 'CAdESCOM.CadesSignedData.Content' can not be set."


Могли бы подсказать пожалуйста, с чем может быть связано?

Участок кода:

Код:
try:
        logger.info(f"Checking signature: document={os.path.basename(document_path)}, signature={os.path.basename(signature_path)}")
        cades = win32com.client.Dispatch('CAdESCOM.CadesSignedData')

        with open(document_path, 'rb') as f:
            content_bytes = f.read()
            # Для DER содержимого, ContentEncoding должен быть установлен в CADESCOM_CONTENT_ENCODING_BINARY (1)
            # При этом, CAdESCOM ожидает "сырые" байты, а не base64.
            # Однако, Python COM-мост может автоматически обрабатывать bytes, но для ясности и соответствия
            # документации (ContentEncoding = 1 для бинарных данных), мы передаем байты напрямую.
            # Если бы мы передавали Base64, то ContentEncoding был бы 0.
            cades.ContentEncoding = CADESCOM_CONTENT_ENCODING_BINARY
            cades.Content = content_bytes # Передаем байты напрямую

        with open(signature_path, 'rb') as f:
            signature_bytes = f.read()
            # Подпись в формате DER также передается как "сырые" байты.
            # Метод VerifyCades принимает бинарную подпись, если она не в Base64.
            # Если подпись в Base64, ее нужно было бы декодировать до передачи.
            # Предполагаем, что .sig файл содержит DER-кодированную подпись.
            signature_to_verify = signature_bytes

        # Выбор типа подписи для проверки.
        # В данном случае, .sig файл часто содержит PKCS#7 (DER), поэтому PKCS7_DETACHED
        # является наиболее вероятным вариантом для открепленной подписи.
        cades.VerifyCades(signature_to_verify, CADESCOM_CADES_TYPE_PKCS7_DETACHED, True) 
        # cades.VerifyCades(signature_to_verify, CADESCOM_CADES_TYPE_CADES_BES, True) # Если подпись CAdES BES
        # cades.VerifyCades(signature_to_verify, CADESCOM_CADES_TYPE_CADES_T, True) # Если подпись CAdES T
        # cades.VerifyCades(signature_to_verify, CADESCOM_CADES_TYPE_CADES_X_LONG_TYPE1, True) # Если подпись CAdES-X Long Type 1
        # cades.Verify(signature_to_verify, True) # Универсальный метод проверки, который сам пытается определить тип


Ошибка возникает на строке:

Код:
cades.Content = content_bytes # Передаем байты напрямую


Если посмотреть, что сохранилось в переменной content_bytes, то можно увидеть, что структура будет похожа на:

Код:
<читаемые симовл><байтовый код><читаемые символы>


Если открыть файл PDF (который сохраняется как байтовая строка в переменную content_bytes) с помощью блокнота, то можно увидеть что-то похожее, что находится в переменной content_bytes.

Начало файла:

Код:
%PDF-1.7
%ИИИИИИИ
1 0 obj
<</Type/Catalog/Version/1.7/Pages 3 0 R/Outlines 2 0 R/Metadata 73 0 R>>
endobj
2 0 obj
<</Type/Outlines>>
endobj
3 0 obj
<</Type/Pages/Kids[8 0 R]/Count 1/DefaultValue(GykqNSk/dAoeHHo8NSh6dBQfDnpoa3RvdGo=)>>
endobj
4 0 obj
<</Author()/CreationDate(D:20250516100310+03'00')/ModDate(D:20250516100310+03'00')/Producer(Aspose.PDF for .NET 21.5.0)/Subject()/Title()/Creator(Aspose Ltd.)>>
endobj
6 0 obj
<</Filter/FlateDecode/Length 8>>stream
xњ    
endstream
endobj
7 0 obj
[/PDF]
endobj
8 0 obj
<</Type/Page/Parent 3 0 R/MediaBox[0 0 595.29998779 841.90002441]/Contents 9 0 R/Resources<</Font<</FAAAAJ 11 0 R/FAAABE 15 0 R/FAAABI 19 0 R/FAAACG 24 0 R>>/ExtGState<</GS1 29 0 R/GS10 30 0 R/GS11 31 0 R/GS12 32 0 R/GS13 33 0 R/GS14 34 0 R/GS15 35 0 R/GS16 36 0 R/GS17 37 0 R/GS18 38 0 R/GS19 39 0 R/GS2 40 0 R/GS20 41 0 R/GS21 42 0 R/GS22 43 0 R/GS23 44 0 R/GS24 45 0 R/GS25 46 0 R/GS26 47 0 R/GS27 48 0 R/GS28 49 0 R/GS29 50 0 R/GS3 51 0 R/GS30 52 0 R/GS31 53 0 R/GS32 54 0 R/GS33 55 0 R/GS34 56 0 R/GS35 57 0 R/GS36 58 0 R/GS37 59 0 R/GS38 60 0 R/GS39 61 0 R/GS4 62 0 R/GS5 63 0 R/GS6 64 0 R/GS7 65 0 R/GS8 66 0 R/GS9 67 0 R>>/XObject<</X1 68 0 R/Im0 71 0 R>>/ProcSet 69 0 R>>/Annots[70 0 R]/StructParents 0/Tabs/S/Rotate 0>>
endobj
9 0 obj
<</Filter/FlateDecode/Length 3979>>stream


Конец файла:

Код:
endstream
endobj
73 0 obj
<</Length 237/Type/Metadata/Subtype/XML>>stream
<?xpacket begin="п»ї" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="" />
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>
endstream
endobj
xref
0 5
0000000000 65535 f
0000000018 00000 n
0000000107 00000 n
0000000142 00000 n
0000000245 00000 n
6 68
0000000422 00000 n
0000000498 00000 n
0000000521 00000 n
0000001267 00000 n
0000005317 00000 n
0000005341 00000 n
0000005921 00000 n
0000006114 00000 n
0000050136 00000 n
0000050159 00000 n
0000050403 00000 n
0000050605 00000 n
0000065924 00000 n
0000065947 00000 n
0000066093 00000 n
0000066465 00000 n
0000066681 00000 n
0000066734 00000 n
0000067130 00000 n
0000067271 00000 n
0000068192 00000 n
0000068399 00000 n
0000068463 00000 n
0000069216 00000 n
0000069263 00000 n
0000069310 00000 n
0000069357 00000 n
0000069404 00000 n
0000069451 00000 n
0000069498 00000 n
0000069545 00000 n
0000069592 00000 n
0000069639 00000 n
0000069686 00000 n
0000069733 00000 n
0000069780 00000 n
0000069827 00000 n
0000069874 00000 n
0000069921 00000 n
0000069968 00000 n
0000070015 00000 n
0000070062 00000 n
0000070109 00000 n
0000070156 00000 n
0000070203 00000 n
0000070250 00000 n
0000070297 00000 n
0000070344 00000 n
0000070391 00000 n
0000070438 00000 n
0000070485 00000 n
0000070532 00000 n
0000070579 00000 n
0000070626 00000 n
0000070673 00000 n
0000070720 00000 n
0000070767 00000 n
0000070814 00000 n
0000070861 00000 n
0000070908 00000 n
0000070955 00000 n
0000071002 00000 n
0000071049 00000 n
0000096851 00000 n
0000096875 00000 n
0000097073 00000 n
0000121113 00000 n
0000121359 00000 n
trailer
<</Root 1 0 R/Info 4 0 R/ID[<39302D32422D35422D41392D34392D41><39302D32422D35422D41392D34392D41>]/Size 74>>
startxref
121674
%%EOF


Как буд-то этот участок файла не кодируется в байтовую строку, но возможно это нормально...

Подпись ЦБ VizualizacijaEhD.PDF.sig (8kb) загружен 4 раз(а). и подписанный файл: VizualizacijaEhD.PDF (121kb) загружен 2 раз(а).
Offline Павел Нагибин  
#6 Оставлено : 28 июля 2025 г. 15:10:29(UTC)
Павел Нагибин

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

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

Сказал(а) «Спасибо»: 5 раз
Служба технической поддержки предоставила корректный пример кода на Python, который проверяет тип подписи DER

Код:
import win32com.client
import win32com.client
import os
import base64

document_path = os.path.join("ЦБ", "ВизуализацияЭД.PDF")
signature_path = os.path.join("ЦБ", "ВизуализацияЭД.PDF.sig")

signedData = win32com.client.Dispatch('CAdESCOM.CadesSignedData')
with open(document_path, 'rb') as f:
content = base64.b64encode(f.read()).decode("utf-8")

with open(signature_path, 'rb') as file:
signature = base64.b64encode(file.read()).decode('utf-8')

signedData.ContentEncoding = 1
signedData.Content = content

signedData.VerifyCades(signature, 65535, True)

Судя по содержимому подписи, это не Cades-XLT1, а PKCS#7 подпись.
Можно проверить при помощи метода GetMsgType:
signedData.GetMsgType(signature)
Возвращает
CADESCOM_PKCS7_TYPE = 0xffff (65535)


Но в моем окружении ошибка сохраняется:

Код:
pywintypes.com_error: (-2147352567, 'Ошибка.', (0, 'CAdESCOM.CadesSignedData.1', 'Объект или свойство не найдено.', None, 0, -2146885628), None)


Ищем причину...
Online Андрей *  
#7 Оставлено : 28 июля 2025 г. 15:20:17(UTC)
Андрей *

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

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

Сказал «Спасибо»: 582 раз
Поблагодарили: 2314 раз в 1812 постах
Сообщите больше информации - какие сборки используются, csp\cades\...
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#8 Оставлено : 28 июля 2025 г. 15:23:11(UTC)
Андрей *

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

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

Сказал «Спасибо»: 582 раз
Поблагодарили: 2314 раз в 1812 постах
А Вы пробовали удалить штамп?
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#9 Оставлено : 28 июля 2025 г. 15:26:07(UTC)
Андрей *

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

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

Сказал «Спасибо»: 582 раз
Поблагодарили: 2314 раз в 1812 постах
Проверьте этот вариант, вдруг...
VizualizacijaEhD.PDF.sig (4kb) загружен 0 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Павел Нагибин оставлено 28.07.2025(UTC)
Offline Павел Нагибин  
#10 Оставлено : 28 июля 2025 г. 15:27:28(UTC)
Павел Нагибин

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
Сообщите больше информации - какие сборки используются, csp\cades\...


На машине с Windows 10
- установлена версия КриптоПро 5.0 12000 КС1 9 (с постоянной клиентской лицензией)
- плагин 2.0.14590
На машине с Windows Server 2019
- установлена версия КриптоПро 5.0 13000 КС1 (пота с временной лицензией)
- плагин 2.0.15000
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.