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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline navrocky  
#1 Оставлено : 22 мая 2025 г. 16:14:50(UTC)
navrocky

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
Создаю корневой ключевой контейнер с корневым сертификатом при помощи minica по этой инструкции: https://support.cryptopro.ru/index.php?/cryptopro/Knowledgebase/Article/View/290/0/sozdnie-cepochek-sertifiktov-s-pomoshhju-csptest--minica


Код:
/opt/cprocsp/bin/amd64/csptest -minica -root \
  -dn "CN=MiniCA GOST root cert" -provtype 80 \
  -container "minica_gost_root" -password "1" -exportable \
  -fcert ./gost_root.cer


В итоге создается ключевой контейнер без сертификата (только приватный и публичный ключ), сертификат создается отдельно в хранилище сертификатов. Я так понимаю это не нормально, так как в продовых ключевых контейнерах всегда помимо ключей присутствует сертификат. Проверяю наличие встроенного в контейнер сертификата при помощи cptools (отсутствует "сертификат в контейнере").

Как это можно исправить?

При создании конечного сертификата (leaf) я хоть могу его выгрузить в pfx и загрузить обратно, тогда появляется встроенный сертификат, а вот корневой я не могу выгрузить, кнопка "Экспортировать ключи" неактивна.

Проблема в том, что мой код был написан так, что он открывает ключевой контейнер и пытается взять сертификат из публичного ключа. Но конкретно с этими тестовыми контейнерами он не работает.

Как вариант, подскажите как загрузить связанный с ключевым контейнером сертификат из хранилища сертификатов, как понять в каком хранилище он находится? Чем задается эта связь?
Offline Зубов Иван  
#2 Оставлено : 23 мая 2025 г. 20:13:33(UTC)
Зубов Иван

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

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

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

Постараюсь ответить вам по пунктам.

> Я так понимаю это не нормально, так как в продовых ключевых контейнерах всегда помимо ключей присутствует сертификат.
Насколько я могу судить, нет. Вы правы, что это наверное самый распространённый вариант, но он не является единственно верным. Поэтому minica и сделана так, что не устанавливает сертификат в контейнер по умолчанию: это не всегда требуется. А в случае, когда всё же требуется, это можно сделать отдельной командой, о чём речь пойдёт ниже.

> Как это можно исправить?
Через наши утилиты задачу установки сертификата в контейнер, как я понимаю, можно сделать несколькими способами. Нашёл один из способов, первый попавшийся, который сработал, им и поделюсь. Проверил по вашему сценарию: создал сертификат той же командой, увидел в cptools, что в контейнере нет сертификата, доустановил его туда, увидел в cptools, что он там есть. Та самая команда:
/opt/cprocsp/bin/amd64/csptest -keyset -impcert ./gost_root.cer -container "minica_gost_root" -password "1" -keytype exchange
Альтернативно можно например так:
/opt/cprocsp/bin/amd64/csptest -property -setcert -cert "CN=MiniCA GOST root cert" -storename "root" -container "minica_gost_root"
Почему хранилище "root"? Вы явно не указывали параметр -store при создании сертификата, а значит, бралось умолчание:
csptest.exe -minica -help
Цитата:
csptest.exe -minica [<command>] [<options>]
CSPTEST certificate generation
<command>:
-root Generate root CA certificate. Default store: uRoot
-ca Generate intermediate CA certificate. Default store: uCA
-leaf Generate leaf certificate. Default store: uMy


> подскажите как загрузить связанный с ключевым контейнером сертификат из хранилища сертификатов
Открыть хранилище можно через CertOpenStore, найти сертификат через CertFindCertificateInStore. Но возможно, это вам уже не нужно.

> как понять в каком хранилище он находится?
Ответил выше. Но возможно, это вам уже не нужно.

> Чем задается эта связь?
Привязка сертификата к контейнеру осуществляется за счёт свойства с идентификатором CERT_KEY_PROV_INFO_PROP_ID, получить которое можно через CertGetCertificateContextProperty, установить которое можно через CertSetCertificateContextProperty. Но возможно, это вам уже не нужно.

Надеюсь, ответил на ваши вопросы.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Зубов Иван за этот пост.
navrocky оставлено 25.05.2025(UTC)
Offline navrocky  
#3 Оставлено : 25 мая 2025 г. 14:18:34(UTC)
navrocky

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 2 раз в 2 постах
Спасибо! буду пробовать
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.