Получите размер открытого ключа с помощью WinHttpQueryOption

Мне нужно найти Открытый ключ, указанный в деталях сертификата. Я использовал параметр WinHttpQuery и предоставил WINHTTP_OPTION_SERVER_CERT_CONTEXT в качестве флага параметра.

bRet = WinHttpQueryOption(
hRequest,
WINHTTP_OPTION_SERVER_CERT_CONTEXT,
&pCert,
&dwLen

);

Я нашел тип шифрования с открытым ключом, используя структуру, возвращенную из WinhttpQueryOption. Теперь мне нужно найти размер открытого ключа

Пример: RSA (2048 бит)

Есть ли способ найти размер открытого ключа с помощью этого метода или есть какой-либо другой способ?

Пример сведений о сертификате


person Keshav    schedule 08.01.2018    source источник
comment
Я думаю, переменная pCert содержит указатель на структуру CERT_CONTEXT. Вы можете просмотреть этот объект (есть поле pCertInfo, которое содержит указатель на структуру CERT_INFO). Используйте это, чтобы сузить список до SubjectPublicKeyInfo.   -  person Crypt32    schedule 08.01.2018
comment
Да, я сделал это, и вот как я нашел алгоритм шифрования. Я могу получить имя алгоритма и открытый ключ (в закодированном виде). Теперь, как я могу получить размер ключа? Примечание. Открытый ключ имеет тип CRYPT_BIT_BLOB.   -  person Keshav    schedule 08.01.2018
comment
Размер открытого ключа четко указан как 256 бит. Не размещайте здесь изображения текста, и особенно ссылки на изображения текста. Непонятно, что вы спрашиваете.   -  person user207421    schedule 08.01.2018
comment
Хм, я разместил его, чтобы я мог ясно понять, чего я хочу от деталей сертификата. Вот почему я упомянул это как Образец сведений о сертификате .   -  person Keshav    schedule 08.01.2018


Ответы (1)


После нескольких часов поиска я наконец нашел решение.

С помощью WinHttpQueryOption используйте WINHTTP_OPTION_SERVER_CERT_CONTEXT в качестве флага параметра и получите структуру pCert(CERT_CONTEXT) . Теперь получите член структуры PCERT_INFO, чтобы получить подробную информацию о сертификате. В PCERT_INFO используйте элемент SubjectPublicKeyInfo, используйте функцию CertGetPublicKeyLength() и передайте ей член SubjectPublicKeyInfo в качестве аргумента. Эта функция возвращает длину открытого ключа.

Код :

bRet = WinHttpQueryOption(
hRequest,
WINHTTP_OPTION_SERVER_CERT_CONTEXT,
&pCert,
&dwLen
);

cout<<"Alg Name : "<<pCert->pCertInfo-
>SubjectPublicKeyInfo.Algorithm.pszObjId<<endl;
CRYPT_BIT_BLOB pubKey = pCert->pCertInfo->SubjectPublicKeyInfo.PublicKey;

DWORD pLength = CertGetPublicKeyLength(X509_ASN_ENCODING | 
PKCS_7_ASN_ENCODING,&pCert->pCertInfo->SubjectPublicKeyInfo);
cout<<"Length of public key : "<<pLength<<endl;
person Keshav    schedule 08.01.2018