使用带有IXMLHTTPRequest3的SSL客户端证书

时间:2016-08-04 21:26:49

标签: c++ windows http ssl-certificate client-certificates

我正在使用C ++代码中的IXMLHTTPRequest3向服务发出请求。此请求需要附带客户端证书(这是IXHR3在IXHR2上添加的唯一内容)。

证书的指纹是8D1CC03002D7872230516B5C5BA1090084D68ED0,我已经确认它已安装在计算机上:

PS> dir cert:\*\*\* | ? { $_.Thumbprint -eq "8D1CC03002D7872230516B5C5BA1090084D68ED0" }

    Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My

Thumbprint                                Subject
----------                                -------
8D1CC03002D7872230516B5C5BA1090084D68ED0  DC=..., O=..., OU=...

但是,当我尝试将指纹传递给IXHR3->SetClientCertificate时,我会回到0x80092004,CRYPT_E_NOT_FOUND

我将哈希从十六进制字符串转换为一个20字节的数组(通过自动化来避免我的转换错误),我的调用如下所示:

uint8_t thumbprint[20] = { 0x8d, 0x1c, 0xc0, 0x30, ... };
hr = request->SetClientCertificate(ARRAYSIZE(thumbprint), thumbprint, nullptr);

显然,问题是:为什么IXHR3不能找到我的客户证书?

1 个答案:

答案 0 :(得分:1)

IXHR3仅在CERT_STORE_PROV_SYSTEM - >中查找证书CERT_SYSTEM_STORE_CURRENT_USER,而我的是CERT_SYSTEM_STORE_LOCAL_MACHINE