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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Baki111  
#11 Оставлено : 13 декабря 2022 г. 12:55:30(UTC)
Baki111

Статус: Участник

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

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
Автор: cancer Перейти к цитате
В итоге, на текущий момент, подходящую подпись для получения токена от МДЛП, получается создать только при помощи следующей команды:

./csptest -sfsign -sign -in <путь>/code.txt -out <путь>/out.txt -my <отпечаток сертификата> -detached -base64 -add

Подскажите, как при помощи pycades создать подпись, эквивалентную результату этой команды? Спасибо.


У Вас выше же успешно формировалась и проверялась отсоединенная подпись.


Отличие:
Утилита добавляет только сертификат подписанта,
в pycades явно указать CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
Цитата:
= 2 Сохраняет только сертификат конечного пользователя.



на JS это выглядит так:
Код:

yield  oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);


Спасибо! Да, дело было именно в Options, подпись МДЛП принимается, токен приходит.
Offline Baki111  
#12 Оставлено : 13 декабря 2022 г. 13:00:21(UTC)
Baki111

Статус: Участник

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

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 1 раз в 1 постах
Код создаёт валидную подпись для API МДЛП (на основе примера из КриптоПро):

Код:

import base64
import pycades

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.Options = pycades.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY

string_to_sign = "b1758253-9220-421a-8dee-c701f32e4c37"
b = base64.b64encode(bytes(string_to_sign, 'utf-8'))
base64_str = b.decode('utf-8')

signedData = pycades.SignedData()
signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
signedData.Content = base64_str
signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES, True)
final_signature = ''.join(signature.splitlines())
print("--Signature--")
print(final_signature)
print("----")

_signedData = pycades.SignedData()
_signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
_signedData.Content = signedData.Content
_signedData.VerifyCades(signature, pycades.CADESCOM_CADES_BES, True)
print("Verified successfully")

Отредактировано пользователем 13 декабря 2022 г. 13:35:19(UTC)  | Причина: добавил import base64

thanks 1 пользователь поблагодарил Baki111 за этот пост.
icl_username оставлено 21.02.2025(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.