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

Уведомление

Icon
Error

24 Страницы«<56789>»
Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#61 Оставлено : 28 декабря 2020 г. 10:58:19(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Цитата:
Помогите разобраться с ошибкой. Пытаюсь подписать запрос для отправки в СМЭВ. При попытке подписать XML в режиме CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE, получаю ошибку "An error was encountered while processing an XML digital signature"
Добрый день.
Странно, что пример по структуре для смэв 2, да и то не хватает AppData. На смэв 3 вообще непохоже ни структурой ни подписью.

Ближе к вопросу - предположу, что как минимум дело в том, что в шаблоне указаны алгоритмы гост-2001, а реальный ключ скорее всего гост-2012, так как гост-2001 запрещен в 2020 году. SignatureMethod должен совпадать с алгоритмом ключа, ну и реальный СМЭВ скорее всего откажется принимать смешанный вариант когда DigestMethod и SignatureMethod разных алгоритмов.
Код:
urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256
urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256
Цитата:
1. Может ли данное расширение работать с ключами, на контейнеры которых установлен пароль?
2. Если нет, подскажите пожалуйста, методы в интерфейсе С, которые могут работать с такими запароленными контейнерами.
3. Как задать свой адрес ocsp-сервиса? Я правильно понимаю, что в таком случае проверка любой подписи, в сертификате которой не указан oscp, пойдет через этот "свой ocsp-сервис"?
4. Может ли так оказаться что после запроса в сторону своего ocsp-сервиса, продолжится проверка по crl спискам из сертификата подписи?
1. Нужно задать пароль до фактического использования ключа. Полагаю, что это возможно в расширении (точнее надо искать в справке). Многое зависит будет ли приложение в серверном режиме без пользователя или тихом режиме или пользователь сможет ввести пароль. Если пользователь может ввести пароль можно вообще не беспокоиться, а вот в серверном или тихом режиме пароль надо или задать в приложении или запомнить средствами криптопровайдера.
2. Насколько помню для этого можно использовать CryptSetProvParam PP_EXCHANGE_PIN (или PP_SIGNATURE_PIN) Там есть градации от криптопровайдера и носителя, некоторые носители поддерживают также смену пинкода этой функцией, но большинство только указывает пароль для следующей операции с ключом.
3. можно задать отдельно при проверке по мере необходимости. В справке говорится про специальные свойства хранилища сертификатов для сертификата УЦ - так можно адресовать конкретный УЦ. И потом уже групповая политика - для всех подписей.
4. полагаю да, если ocsp ответа не будет или сам ответ не удается проверить.

Отредактировано пользователем 28 декабря 2020 г. 11:08:58(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
bsoft оставлено 14.01.2021(UTC)
Offline Ситдиков Денис  
#62 Оставлено : 28 декабря 2020 г. 12:21:33(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 34 раз в 25 постах
Цитата:
Цитата:

1. Может ли данное расширение работать с ключами, на контейнеры которых установлен пароль?
2. Если нет, подскажите пожалуйста, методы в интерфейсе С, которые могут работать с такими запароленными контейнерами.
3. Как задать свой адрес ocsp-сервиса? Я правильно понимаю, что в таком случае проверка любой подписи, в сертификате которой не указан oscp, пойдет через этот "свой ocsp-сервис"?
4. Может ли так оказаться что после запроса в сторону своего ocsp-сервиса, продолжится проверка по crl спискам из сертификата подписи?

1. Нужно задать пароль до фактического использования ключа. Полагаю, что это возможно в расширении (точнее надо искать в справке). Многое зависит будет ли приложение в серверном режиме без пользователя или тихом режиме или пользователь сможет ввести пароль. Если пользователь может ввести пароль можно вообще не беспокоиться, а вот в серверном или тихом режиме пароль надо или задать в приложении или запомнить средствами криптопровайдера.
2. Насколько помню для этого можно использовать CryptSetProvParam PP_EXCHANGE_PIN (или PP_SIGNATURE_PIN) Там есть градации от криптопровайдера и носителя, некоторые носители поддерживают также смену пинкода этой функцией, но большинство только указывает пароль для следующей операции с ключом.
3. можно задать отдельно при проверке по мере необходимости. В справке говорится про специальные свойства хранилища сертификатов для сертификата УЦ - так можно адресовать конкретный УЦ. И потом уже групповая политика - для всех подписей.
4. полагаю да, если ocsp ответа не будет или сам ответ не удается проверить.


Добрый день.
1. Да, может. В коде задать пароль можно, используя свойтво Signer.KeyPin.
3. Можно воспользоваться групповыми политиками или задать в свойствах сертификата издателя для данного сертификата. Порядок обхода указан здесь. Если определить статус сертификата через OCSP не удалось, используются CRL.
4. Да.

Отредактировано пользователем 28 декабря 2020 г. 12:27:54(UTC)  | Причина: Не указана

Offline bsoft  
#63 Оставлено : 29 декабря 2020 г. 4:01:48(UTC)
bsoft

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

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

Сказал(а) «Спасибо»: 11 раз
Автор: two_oceans Перейти к цитате
Странно, что пример по структуре для смэв 2, да и то не хватает AppData. На смэв 3 вообще непохоже ни структурой ни подписью.


Это Региональный СМЭВ. Оператор РСМЭВ создал на его базе функционал по централизованной регистрации заявлений на государственные (муниципальные) услуги. Я пишу адаптер для муниципальной информационной системы.

Автор: two_oceans Перейти к цитате
Ближе к вопросу - предположу, что как минимум дело в том, что в шаблоне указаны алгоритмы гост-2001, а реальный ключ скорее всего гост-2012, так как гост-2001 запрещен в 2020 году. SignatureMethod должен совпадать с алгоритмом ключа, ну и реальный СМЭВ скорее всего откажется принимать смешанный вариант когда DigestMethod и SignatureMethod разных алгоритмов.


Спасибо! Помогло.
Offline mstdoc  
#64 Оставлено : 29 декабря 2020 г. 19:36:25(UTC)
mstdoc

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
Добрый день.
Не могу разобраться с отделенной подписью.

Код:

import sys
sys.path.append(r'/usr/local/lib/python3.8/pycades.so')
import pycades


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

signer = pycades.Signer()
signer.Certificate = certs.Item(1)

content = "test"
signedData = pycades.SignedData()
signedData.Content = content
signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES, True)

print("--Signature--")
print(signature)
print(len(signature))
print("----")

_signedData = pycades.SignedData()
_signedData.Content = content
_signedData.VerifyCades(signature, pycades.CADESCOM_CADES_BES, True)


Получаю подпись.
Размер подписи (base64 c переносами) = 8180 символов.

Далее создаю текстовый файл с содержимым "test" и пытаюсь проверить эту подпись в криптоАРМ.
Получаю отрицательный результат.

Создаю отделенную подпись при помощи расширения pycryptoprosdk.
Проверяю в том же криптоАрме с тем же файлом "test" - получаю положительный вариант.

При этом, если создать присоединенную подпись в pycades, то в криптоАрме она проверяется нормально.


Так же в структуре подписи, созданной в pycades:
Код:

            SEQUENCE (2 elem)
              OBJECT IDENTIFIER 1.2.840.113549.1.9.4 messageDigest (PKCS #9)
              SET (1 elem)
                OCTET STRING (32 byte) 8BE25D8DB2AF0414B08307B23EF01892DE51D0A164605B41BDDE36ADAC5C6413


В структуре подписи, созданной pycryptoprosdk:
Код:

            SEQUENCE (2 elem)
              OBJECT IDENTIFIER 1.2.840.113549.1.9.4 messageDigest (PKCS #9)
              SET (1 elem)
                OCTET STRING (32 byte) 12A50838191B5504F1E5F2FD078714CF6B592B9D29AF99D0B10D8D02881C3857

Если хэшировать файл с содержимым "test" в консольной утилите, на выходе получаем хэш:
Код:

/opt/cprocsp/bin/amd64/cryptcp -hash -dir /tmp -hashAlg 1.2.643.7.1.1.2.2 -hex /tmp/test
12A50838191B5504F1E5F2FD078714CF6B592B9D29AF99D0B10D8D02881C3857


При этом само расширение pycades собственную подпись проверяет успешно.

Отредактировано пользователем 29 декабря 2020 г. 20:16:01(UTC)  | Причина: Не указана

Offline mstdoc  
#65 Оставлено : 29 декабря 2020 г. 20:52:02(UTC)
mstdoc

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
А можно ли, имея на руках подпись, используя данное расширение получить данные сертификата, ключем которого эта подпись создавалась?
Offline Санчир Момолдаев  
#66 Оставлено : 29 декабря 2020 г. 21:25:12(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Добрый день!
обратите внимание на https://docs.cryptopro.r.../plugin/content-encoding
задайте ContentEncoding в CADESCOM_BASE64_TO_BINARY = 0x01
затем данные закодируйте в base64 и подайте в signedData.Content
т.к. content = "test" в STRING_TO_UCS2LE будет иметь совершенно другой вид.
Техническую поддержку оказываем тут
Наша база знаний
Offline mstdoc  
#67 Оставлено : 29 декабря 2020 г. 23:53:33(UTC)
mstdoc

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
Автор: Санчир Момолдаев Перейти к цитате
Добрый день!
обратите внимание на https://docs.cryptopro.r.../plugin/content-encoding
задайте ContentEncoding в CADESCOM_BASE64_TO_BINARY = 0x01
затем данные закодируйте в base64 и подайте в signedData.Content
т.к. content = "test" в STRING_TO_UCS2LE будет иметь совершенно другой вид.


Да, после установки CADESCOM_BASE64_TO_BINARY работает корректно.
Благодарю )
Offline Санчир Момолдаев  
#68 Оставлено : 29 декабря 2020 г. 23:59:23(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Автор: mstdoc Перейти к цитате
А можно ли, имея на руках подпись, используя данное расширение получить данные сертификата, ключем которого эта подпись создавалась?


у проверяемого SignedData получить список Signer и т.д.
Техническую поддержку оказываем тут
Наша база знаний
Offline Clutcher  
#69 Оставлено : 2 января 2021 г. 0:55:26(UTC)
Clutcher

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день, я бы хотел создать сайт на django для учёбы, чтобы там была возможность войти по ЭЦП и организовать подписание документов. Возможно ли реализовать это при помощи данного расширения? Или есть готовые решения?
Offline Санчир Момолдаев  
#70 Оставлено : 2 января 2021 г. 2:38:11(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Автор: Clutcher Перейти к цитате
Добрый день, я бы хотел создать сайт на django для учёбы, чтобы там была возможность войти по ЭЦП и организовать подписание документов. Возможно ли реализовать это при помощи данного расширения? Или есть готовые решения?


Добрый день.
Именно на python примера нет.
Общая мысль: у клиента должна подписываться некоторая уникальная строка которая приходит с сервера. На сервере проверяется подпись и сравниваются подписанные данные.
Front: html + js (cades plugin)
Backend: python + pycades
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Clutcher оставлено 02.01.2021(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (4)
24 Страницы«<56789>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.