Здравствуйте.
Постараюсь ответить вам по пунктам.
> Я так понимаю это не нормально, так как в продовых ключевых контейнерах всегда помимо ключей присутствует сертификат.
Насколько я могу судить, нет. Вы правы, что это наверное самый распространённый вариант, но он не является единственно верным. Поэтому 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. Но возможно, это вам уже не нужно.
Надеюсь, ответил на ваши вопросы.