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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Павел Геннадьевич  
#1 Оставлено : 17 июня 2024 г. 12:35:39(UTC)
Павел Геннадьевич

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

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

Добрый день!

Установил либу pycades для Python, пытаюсь загрузить сертификат и подписать им XML.
Ошибки, с которыми я столкнулся:

1. При попытке присвоения объекту signer сертификата из хранилища, падает ошибка `TypeError: argument must be pycades.Certificate, not PycadesModuleWrapper`.

Пример кода:
Код:
from pycades import pycades

store = pycades.Store()
store.Open(pycades.CAPICOM_CURRENT_USER_STORE, pycades.CAPICOM_ROOT_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
cert = pycades.Certificate()

with open('certificate.cer', 'rb') as cert:
    cert.Import(cert.read())

store.Add(cert)
assert (store.Certificate.Count != 0), 'Certificates with private key not found'

signer = pycades.Signer()
signer.Certificate = store.Certificates.Item(7)  #на этом этапе падаем с ошибкой



Полный текст ошибки:

Код:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.12/site-packages/pycades/__init__.py", line 70, in __setattr__
    setattr(self._original_instance, name, value)
TypeError: argument must be pycades.Certificate, not PycadesModuleWrapper


Почему pycades не пропускает сертификаты из оболочки Python?



2. При попытке открыть пользовательское хранилище "My" получаю ошибку:
Код:
Exception: The system cannot find the file specified. (0x80070002)


Пример кода:
Код:

from pycades import pycades

store = pycades.Store()
store.Open(pycades.CAPICOM_CURRENT_USER_STORE, pycades.CAPICOM_ROOT_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)  # падаем на этом шаге


Полный текст ошибки:
Код:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.12/site-packages/pycades/__init__.py", line 44, in __call__
    value = self._original_instance(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception: The system cannot find the file specified. (0x80070002)


При этом, если я просматриваю хранилище в контейнере с помощью
Код:
/opt/cprocsp/bin/amd64/certmgr -enumstores all_locations
, то оно пустое. А если я открываю его через pycades, то вижу сразу 7 предустановленных сертификатов.

При просмотре хранилища в контейнере:

Код:
CurrentUser:
LocalMachine:
  cryptoprotrustedstore
    Default
  root
    Default
  ca
    Default
  my
    Default


При открытии хранилища из pycades:
Код:

from pycades import pycades

store = pycades.Store()
store.Open(pycades.CAPICOM_CURRENT_USER_STORE, pycades.CAPICOM_ROOT_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)

store.Certificates.Count  #на выводе 7 штук


Почему идет рассинхронизация с хранилищами в контейнере и хранилищами, которые я открываю через pycades?
Offline Андрей *  
#2 Оставлено : 17 июня 2024 г. 12:57:35(UTC)
Андрей *

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

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

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

Цитата:

with open('certificate.cer', 'rb') as cert:
cert.Import(cert.read())



чисто логически - а как \ где \ кто будет искать\использовать контейнер с закрытым ключом?
Само собой должно сработать? Просто добавим сертификат, а внутри пусть само думает, где ключ... в папке\флешке\токене\облаке?




Начните с минимального примера
+
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
+
показывайте, какие сертификаты и с какими контейнерами связаны.

Цитата:
/opt/cprocsp/bin/amd64/certmgr -list -cert -store uMy



по ошибке:
Exception: The system cannot find the file specified. (0x80070002)


Цитата:
При просмотре хранилища в контейнере:

Код:
CurrentUser: здесь пусто
LocalMachine:
..
..





пример, как обычно должно быть:

/opt/cprocsp/bin/amd64/certmgr -enumstores all_locations
CurrentUser:
ca
Default
LocalMachine
my
Default

request
Default
root
Default
LocalMachine
cache
Default
cryptoprotrustedstore
Default
LocalMachine
addressbook
Default
LocalMachine
LocalMachine:
ca
Default
my
Default
request
Default
root
Default
cache
Default
clientauthissuer
Default
cryptoprotrustedstore
Default
addressbook
Default

[ErrorCode: 0x00000000]



основные вопросы - где контейнер\почему возникает необходимость добавлять из кода сертификат из файла
и зачем работа с pycades.CAPICOM_ROOT_STORE


Техническую поддержку оказываем тут
Наша база знаний
Offline Павел Геннадьевич  
#3 Оставлено : 17 июня 2024 г. 15:38:32(UTC)
Павел Геннадьевич

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

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

У меня приложение развернуто в контейнере, я загружаю туда сертификат с закрытым ключом
Код:
certmgr -inst -pfx -file f.pfx -pin 1 -silent -store uMy

и ожидаю, что он будет в хранилище CurrentUser-> my.

Проверяю хранилища в контейнере:

Код:
/opt/cprocsp/bin/amd64/certmgr -enumstores all_locations


Код:

CurrentUser:
  my
    Default
LocalMachine:
  cryptoprotrustedstore
    Default
  root
    Default
  ca
    Default
  my
    Default



Проверяю связь контейнера и сертификата:
Код:
/opt/cprocsp/bin/amd64/certmgr -list -cert -store uMy


Код:

=============================================================================
1-------
Issuer              : E=ca@sertum.ru, OGRN=1116673008539, INNLE=6673240328, C=RU, S=66 Свердловская область, L=Екатеринбург, STREET="ул. Малопрудная, стр. 5, офис 715", O="ООО ""Сертум-Про""", CN="ООО ""Сертум-Про"""
Subject             : E=fedu@list.ru, INN=780418471090, SNILS=11220609994, G=Дмитрий Юрьевич, SN=Федоров, CN=Федоров Дмитрий Юрьевич
Serial              : ...............
SHA1 Thumbprint     : ...............
SubjKeyID           : ...............
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
Not valid before    : 10/01/2024  11:11:23 UTC
Not valid after     : 10/01/2025  11:17:15 UTC
Embedded License    : CryptoPro CSP
PrivateKey Link     : Yes
Container           : HDIMAGE\\pfx-23ee.000\CF19
Provider Name       : Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider
Provider Info       : Provider Type: 80, Key Spec: 1, Flags: 0x0
Identification Kind : Without personal presence by qualified signature
OCSP URL            : http://pki3................
OCSP URL            : http://ocsp...............
CA cert URL         : http://ca.sertu...............
CA cert URL         : http://ca.sert...............
CDP                 : http://ca.s...............
CDP                 : http://ca.s...............
Extended Key Usage  : 1................ Проверка подлинности клиента
                      1................
                      1................ Защищенная электронная почта
                      1...............
                      1............... Квалифицированный сертификат
2-------
Issuer              : E=dit@digital.gov.ru, C=RU, S=77 Москва, L=г. Москва, STREET="Пресненская набережная, дом 10, строение 2", O=Минцифры России, OGRN=1047702026701, INNLE=7710474375, CN=Минцифры России
Subject             : E=dit@digital.gov.ru, C=RU, S=77 Москва, L=г. Москва, STREET="Пресненская набережная, дом 10, строение 2", O=Минцифры России, OGRN=1047702026701, INNLE=7710474375, CN=Минцифры России
Serial              : ....................................
SHA1 Thumbprint     : ....................................
SubjKeyID           : ....................................
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
Not valid before    : 08/01/2022  13:32:39 UTC
Not valid after     : 08/01/2040  13:32:39 UTC
PrivateKey Link     : No
Identification Kind : Personal presence
3-------
Issuer              : E=dit@digital.gov.ru, C=RU, S=77 Москва, L=г. Москва, STREET="Пресненская набережная, дом 10, строение 2", O=Минцифры России, OGRN=1047702026701, INNLE=7710474375, CN=Минцифры России
Subject             : E=ca@sertum.ru, OGRN=1116673008539, INNLE=6673240328, C=RU, S=66 Свердловская область, L=Екатеринбург, STREET="ул. Малопрудная, стр. 5, офис 715", O="ООО ""Сертум-Про""", CN="ООО ""Сертум-Про"""
Serial              : ....................................
SHA1 Thumbprint     : ........................................
SubjKeyID           : ........................................
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
Not valid before    : 01/09/2023  12:39:41 UTC
Not valid after     : 01/09/2038  12:39:41 UTC
PrivateKey Link     : No
Identification Kind : Without personal presence by qualified signature
CA cert URL         : http://reest....................................
CDP                 : http://rees....................................
CDP                 : http://compan....................................
CDP                 : http://roste....................................
=============================================================================



Далее, если открываю хранилище через pycades и смотрю количество сертификатов, то получаю ноль:

Код:

from pycades 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)  # выводит 0



Ответы на вопросы:
- контейнер развернут на сервере
- нет задачи добавлять сертификат прямо из кода, он будет грузиться через certmgr для пользователя (предполагается, что будет один пользователь и сертификат).
- задачи работать с pycades.CAPICOM_ROOT_STORE нет. Это была плохая и отчаянная импровизация, чтобы подписать XML :)
Brick wall
Offline Андрей *  
#4 Оставлено : 17 июня 2024 г. 15:44:36(UTC)
Андрей *

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

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

Сказал «Спасибо»: 572 раз
Поблагодарили: 2301 раз в 1802 постах
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)


вместо CADESCOM_CONTAINER_STORE если указать CADESCOM_CURRENT_USER_STORE сколько выдаст?

pycades запускается от того же пользователя, что и certmgr?



p.s.
PrivateKey Link : No

из хранилища личного лучше удалить сертификаты УЦ (Минцифры и Сертум-Про)

Отредактировано пользователем 17 июня 2024 г. 15:49:43(UTC)  | Причина: CADESCOM_CURRENT_USER_STORE

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 17 июня 2024 г. 15:48:58(UTC)
Андрей *

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

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

Сказал «Спасибо»: 572 раз
Поблагодарили: 2301 раз в 1802 постах
в примерах используются контейнеры для поиска (CADESCOM_CONTAINER_STORE),
тестовый сертификат как раз получается так и записывается в сам контейнер тоже. Через импорт pfx - установка в хранилище и связь с контейнером только.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#6 Оставлено : 17 июня 2024 г. 15:50:44(UTC)
Андрей *

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

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

Сказал «Спасибо»: 572 раз
Поблагодарили: 2301 раз в 1802 постах
Техническую поддержку оказываем тут
Наша база знаний
Offline Павел Геннадьевич  
#7 Оставлено : 17 июня 2024 г. 16:10:44(UTC)
Павел Геннадьевич

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

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

Автор: Андрей * Перейти к цитате

вместо CADESCOM_CONTAINER_STORE если указать CADESCOM_CURRENT_USER_STORE сколько выдаст?


Если пытаюсь открыть хранилище вот так
Код:
store.Open(pycades.CADESCOM_CURRENT_USER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)


то сразу же получаю ошибку:
Код:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.12/site-packages/pycades/__init__.py", line 44, in __call__
    value = self._original_instance(*args, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception: The system cannot find the file specified. (0x80070002)


Но, если даже в оболочке python смотрю на хранилище, то вижу это:
Код:

result = subprocess.run('/opt/cprocsp/bin/amd64/certmgr -enumstores all_locations', stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
print(result.stdout.decode('utf-8'))


Код:

CurrentUser:
  my
    Default
LocalMachine:
  cryptoprotrustedstore
    Default
  root
    Default
  ca
    Default
  my
    Default



Автор: Андрей * Перейти к цитате

pycades запускается от того же пользователя, что и certmgr?

Я захожу в контейнер под root'ом, устанавливаю сертификат и открываю консоль python под ним же (через python3).
Так что технически - да, от одного пользователя.

Автор: Андрей * Перейти к цитате

p.s.
PrivateKey Link : No

из хранилища личного лучше удалить сертификаты УЦ (Минцифры и Сертум-Про)


Да, спасибо. Удалил их)

Локации из документации перебрал все. Нигде моего предустановленного сертификата нет.

Отредактировано пользователем 17 июня 2024 г. 16:11:36(UTC)  | Причина: Не указана

Offline Павел Геннадьевич  
#8 Оставлено : 18 июня 2024 г. 11:42:00(UTC)
Павел Геннадьевич

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

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

Есть какие-нибудь мысли, почему pycades может не видеть существующие в контейнере хранилища?
Offline Павел Геннадьевич  
#9 Оставлено : 20 июня 2024 г. 9:14:03(UTC)
Павел Геннадьевич

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

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

Решение найдено! Неправильно ставилась библиотека pycades.
Offline Андрей *  
#10 Оставлено : 20 июня 2024 г. 12:22:19(UTC)
Андрей *

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

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

Сказал «Спасибо»: 572 раз
Поблагодарили: 2301 раз в 1802 постах
Автор: Павел Геннадьевич Перейти к цитате
Решение найдено! Неправильно ставилась библиотека pycades.


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