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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline astarukhin  
#1 Оставлено : 10 июня 2024 г. 12:21:32(UTC)
astarukhin

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

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

Сказал(а) «Спасибо»: 5 раз
Здравствуйте!
Есть задача получить все данные сертификата. Предв
арительно он создан и помещён в контейнер.
Ясно, что можно получить дескриптор контекста
Код:

 BOOL acqRes = CryptAcquireContext(
                    &hProv, 
                    "\\\\.\\HDIMAGE\\andrey",
                    NULL, 
                    PROV_GOST_2012_256, 
                    CRYPT_SILENT);
    BOOL setRes = CryptSetProvParam(
	hProv,
	PP_KEYEXCHANGE_PIN,
	(BYTE*)"1",
	0);


А вот что дальше не совсем понятно - как по дескриптору выташить сертификат ?
Offline Андрей *  
#2 Оставлено : 10 июня 2024 г. 12:47:48(UTC)
Андрей *

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

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

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

CryptGetUserKey(hProv, AT_KEYEXCHANGE, phUserKey)
если ошибка - вызывать CryptGetUserKey(hCSP, AT_SIGNATURE, phUserKey)

CryptGetKeyParam(phUserKey, KP_CERTIFICATE, nil, pdwDataLen, 0)
выделить память под pbCertificate размером pdwDataLen
CryptGetKeyParam(phUserKey, KP_CERTIFICATE, pbCertificate, pdwDataLen, 0)

получить сертификат:
pCertContext = CertCreateCertificateContext(X509_ASN_ENCODING, pbCertificate, pdwDataLen)

диалог свойств:
CryptUIDlgViewContext(CERT_STORE_CERTIFICATE_CONTEXT, pCertContext, 0, pwszTitle, 0, nil)

освободить память для pbCertificate
CertFreeCertificateContext
CryptReleaseContext

Техническую поддержку оказываем тут
Наша база знаний
Offline astarukhin  
#3 Оставлено : 10 июня 2024 г. 14:44:28(UTC)
astarukhin

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

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

Сказал(а) «Спасибо»: 5 раз
Лучше, но с проблемами

Вот такой код приводит к ошибке: Error number : 0x8010002c (Пустой контейнер?)

Код:
 BOOL acqRes = CryptAcquireContext(
                    &hProv, 
                    "\\\\.\\HDIMAGE\\andrey",
                    NULL, 
                    PROV_GOST_2012_256, 
                    CRYPT_SILENT);
    BOOL setRes = CryptSetProvParam(
	hProv,
	PP_KEYEXCHANGE_PIN,
	(BYTE*)"1",
	0);
    
    HCRYPTKEY  phUserKey = 0;

    BOOL getKeyRes = CryptGetUserKey(hProv, AT_SIGNATURE, &phUserKey);
    DWORD pdwDataLen;
    BOOL getKeyParamRes = CryptGetKeyParam(phUserKey, KP_CERTIFICATE, NULL, &pdwDataLen, 0);
    DWORD err = GetLastError();

    printf("Error number     : 0x%x\n", err);
Offline Андрей *  
#4 Оставлено : 10 июня 2024 г. 15:48:40(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
в getKeyParamRes false?

Точно есть сертификат в контейнере?
Смотреть утилитами\через панель управления\Инструменты КриптоПРО
Техническую поддержку оказываем тут
Наша база знаний
Offline astarukhin  
#5 Оставлено : 10 июня 2024 г. 16:01:50(UTC)
astarukhin

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
в getKeyParamRes false?

Точно есть сертификат в контейнере?
Смотреть утилитами\через панель управления\Инструменты КриптоПРО




Да, и ошибка та самая

Серт есть. Вот его данные

Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject : E=andrey@bank.ru, CN=andrey
Serial : 0x120064243633064401FF966C63000200642436
SHA1 Thumbprint : b7a63baf9a31a470795d5d02174173e3911ef243
SubjectKeyID : 980e6b247c9b863af77a4edc9598033bf325d118
AuthorityKeyID : 13ee0e9af1e08b4aae1916efcbc4c52da919371d
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
Public key : 04 40 11 cc 27 81 0c 10 3a 23 01 d3 17 68 a0 15
b8 70 64 38 6a 8d 18 1e fb c5 60 dc b7 b0 32 98
12 96 60 ef ad 70 ae 2d 91 6a a1 40 e0 b9 29 d0
ce b1 69 2f b2 45 9e f3 b6 7b 39 4d fd 99 9d 6d
f4 bc
Not valid before : 04/06/2024 04:37:46 UTC
Not valid after : 04/08/2024 04:47:46 UTC
PrivateKey Link : Yes
Container : HDIMAGE\\andrey.000\B421
Provider Name : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info : Provider Type: 80, Key Spec: 1, Flags: 0x0
CA cert URL : http://testca.cryptopro....Test%20Center%202(2).crt
OCSP URL : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP : http://testca.cryptopro....Test%20Center%202(2).crl
Key Usage : Digital Signature
Non-Repudiation
Key Encipherment
Data Encipherment
Certificate chain : A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. (0x800b0109)
#0:
Issuer : CRYPTO-PRO Test Center 2
Subject : CRYPTO-PRO Test Center 2
Not valid before : 14/05/2024 16:54:33 UTC
Not valid after : 14/05/2025 17:04:33 UTC
SHA1 Thumbprint : 17d4abc6ea4ba263d7d75ae2757c5a10b9f9b0fa
Status : Error 0x00000020 = IS_UNTRUSTED_ROOT
#1:
Subject : andrey
Not valid before : 04/06/2024 04:37:46 UTC
Not valid after : 04/08/2024 04:47:46 UTC
SHA1 Thumbprint : b7a63baf9a31a470795d5d02174173e3911ef243
Status : Success
Offline Андрей *  
#6 Оставлено : 10 июня 2024 г. 17:10:02(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
Автор: astarukhin Перейти к цитате
Автор: Андрей * Перейти к цитате
в getKeyParamRes false?

Точно есть сертификат в контейнере?
Смотреть утилитами\через панель управления\Инструменты КриптоПРО




Да, и ошибка та самая

Серт есть. Вот его данные



Эта информация от утилиты, которая выдаёт данные из хранилища.

Что в контейнере?
HDIMAGE\\andrey.000\

/var/opt/cprocsp/keys/andrey/andrey/header.key - какой имеет размер?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#7 Оставлено : 10 июня 2024 г. 17:14:06(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
либо посмотреть в GUI: через cptools (Инструменты КриптоПРО)

контейнер без сертификата:
Snimok ehkrana ot 2024-06-10 18-04-07.png (51kb) загружен 4 раз(а).

когда сертификат в контейнере и в тестировании видно это:
Snimok ehkrana ot 2024-06-10 18-06-47.png (111kb) загружен 2 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Offline astarukhin  
#8 Оставлено : 10 июня 2024 г. 17:24:35(UTC)
astarukhin

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: Андрей * Перейти к цитате
Автор: astarukhin Перейти к цитате
Автор: Андрей * Перейти к цитате
в getKeyParamRes false?

Точно есть сертификат в контейнере?
Смотреть утилитами\через панель управления\Инструменты КриптоПРО




Да, и ошибка та самая

Серт есть. Вот его данные



Эта информация от утилиты, которая выдаёт данные из хранилища.

Что в контейнере?
HDIMAGE\\andrey.000\

/var/opt/cprocsp/keys/andrey/andrey/header.key - какой имеет размер?


Занимает 199 байт
Только адрес /var/opt/cprocsp/keys/andrey/andrey.000/header.key

Вот данные контейнера

Private key container
name andrey
unique name HDIMAGE\\andrey.000\B421
FQCN \\.\HDIMAGE\andrey
location user
integrity check successful
loading of keys successful
container version 2
Exchange key
public key length 512
key export forbidden
private key valid to 04/09/2025 03:21:44 UTC
private key usage is permitted before the end of the key validity
algorithm ГОСТ Р 34.10-2012 DH 256 бит
ГОСТ Р 34.10 256 бит, параметры обмена по умолчанию
ГОСТ Р 34.11-2012 256 бит
public key export successful
public key calculation successful
public key import successful
signature successful
verification successful
key exchange is allowed
Signature key
public key length 512
key export forbidden
private key valid to 04/09/2025 03:21:14 UTC
private key usage is permitted before the end of the key validity
algorithm ГОСТ Р 34.10-2012 256 бит
ГОСТ Р 34.10 256 бит, параметры по умолчанию
ГОСТ Р 34.11-2012 256 бит
public key export successful
public key calculation successful
public key import successful
signature successful
verification successful
Symmetric key
does not exist
Container extensions
1.2.643.2.2.37.3.9
critical no
valid to 04/09/2025 03:21:14 UTC
1.2.643.2.2.37.3.10
critical no
valid to 04/09/2025 03:21:44 UTC
Provider information
version 5.0.13000 KC1 Linux AMD64
type and name 80, Crypto-Pro GOST R 34.10-2012 KC1 CSP
mode library
private key time validity control 1 (enabled)


Offline Андрей *  
#9 Оставлено : 10 июня 2024 г. 18:08:15(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
199 байт - контейнер без сертификата.
Записать его через cptools или certmgr.

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

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
p.s.
CryptUIDlgViewContext - для Windows
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.