Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2022(UTC) Сообщений: 6  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Добрый день, у меня есть необходимость программно проверять присланные документы от Гос организации. Приходят письма в которых содержится RTF документ и отсоединенная подпись. Подписывать ничего не надо, надо только проверять. Целевая ОС Ubuntu 20.04, язык Python. Установил и собрал все по инструкции https://docs.cryptopro.r...es/pycades/pycades-buildМодуль импортируется. Теперь как я понимаю нужно установить корневой сертификат? Если да, где его можно взять? В онлайн сервисах есть возможность проверить подпись, там же можно получить информацию о сертификате, его надо установить в качестве корневого?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2022(UTC) Сообщений: 6  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Установил необходимые сертификаты и проверил. /opt/cprocsp/bin/amd64/cryptcp -verify -detached -fext sig -thumbprint ... file_name.rtf Госы шлют подпись с расширение sig, у вас по умолчанию sgn. Я надеюсь, что для процедуры проверки подписи лицензию не надо покупать? Что будет когда истечет временная? Отредактировано пользователем 27 апреля 2022 г. 20:40:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,666   Сказал «Спасибо»: 571 раз Поблагодарили: 2298 раз в 1799 постах
|
Автор: Pavel Bel 
Я надеюсь, что для процедуры проверки подписи лицензию не надо покупать? Что будет когда истечет временная? Не требуется, после истечения - будет проверять. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2022(UTC) Сообщений: 6  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Не получается почему то через pycades сделать проверку. Пока тупо в лоб пытаюсь делать так: Цитата: rtf = 'notification_on.rtf' file = open(rtf, 'rb') content = file.read().decode('ascii') file.close()
hashedData = pycades.HashedData() hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 hashedData.Hash(content)
sig = open('notification_on.rtf.sig', 'rb') raw_signature = sig.read() sig.close() signature = base64.encodebytes(raw_signature).decode('ascii')
_signedData = pycades.SignedData() _signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)
Exception: Internal error. (0x8009200E) Судя по коду ошибки это: The signed cryptographic message does not have a signer for the specified signer index. Что я не так делаю?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,666   Сказал «Спасибо»: 571 раз Поблагодарили: 2298 раз в 1799 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,666   Сказал «Спасибо»: 571 раз Поблагодарили: 2298 раз в 1799 постах
|
почему не используется VerifyCades? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2022(UTC) Сообщений: 6  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,666   Сказал «Спасибо»: 571 раз Поблагодарили: 2298 раз в 1799 постах
|
В файле cms в der, там нет кодирования. Т.е. нужно проверять der\base64(строка\со служебными заголовками). Убрать декодирование из base64, получится вот так: Код:rtf = 'notification_on.rtf'
file = open(rtf, 'rb')
content = file.read().decode('ascii')
file.close()
hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.Hash(content)
sig = open('notification_on.rtf.sig', 'rb')
signature = sig.read()
sig.close()
_signedData = pycades.SignedData()
_signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)
проверяется? либо content передать в _signedData.Content и _signedData. VerifyCades(signature, pycades.CADESCOM_CADES_BES) |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 24.04.2022(UTC) Сообщений: 6  Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Спасибо за советы, вот что получается: signature должна быть строкой, иначе TypeError: argument 2 must be str, not bytes если сделать: Цитата: _signedData.VerifyHash(hashedData, str(signature), pycades.CADESCOM_CADES_BES)
то Exception: Internal error. (0x8009100E)
если через VerifyCades _signedData.VerifyCades(str(signature), pycades.CADESCOM_CADES_BES)
то Exception: Internal error. (0x8009100E)
Ошибки одинаковые, в обоих случаях, но отличаются от предыдущей Видимо как то не так передается файл подписи. Пробовал разные декодирования, но они не проходят. В чем может быть дело?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,666   Сказал «Спасибо»: 571 раз Поблагодарили: 2298 раз в 1799 постах
|
str что делает?
Функции или бинарные данные или base64(бинарные данные) принимают. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close