使用WinHttpQueryOption获取公钥的大小

时间:2018-01-08 07:17:38

标签: c++ ssl-certificate visual-c++-2010 winhttp

我需要找到证书详细信息中指定的公钥。我使用了WinHttpQuery选项并提供了WINHTTP_OPTION_SERVER_CERT_CONTEXT作为选项标记。

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

);

我使用从WinhttpQueryOption返回的结构找到了公钥加密类型。现在我需要找到公钥的大小

示例:RSA(2048位)

有没有办法使用这种方法查找公钥的大小,还是有其他方法吗?

Sample of certificate details

1 个答案:

答案 0 :(得分:0)

经过几个小时的搜索,我终于找到了解决方案。

使用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;