c++ - 将 SSL 客户端证书与 IXMLHTTPRequest3 一起使用

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

我正在使用 IXMLHTTPRequest3从 C++ 代码向服务发出请求。此请求需要附有客户端证书(这几乎是 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 找不到我的客户端证书?

最佳答案

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

关于c++ - 将 SSL 客户端证书与 IXMLHTTPRequest3 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777665/

相关文章:

c++ - 读取/输出文件时出现问题

c++ - Spirit::Boost编译错误可能与单元素 fusion 序列有关

c# - 如何使用 C# 删除 Windows 用户帐户

python - 如何在 python 中使用 action=fetch 向 url 发送 HTTP POST 请求?

javascript - 表单提交后可能的 HTTP 请求状态

c++ - 如何进行字符串中指定的算术运算?

c++ - 在 C++ 中将对象存储在二维 Sprite 矩阵中

linux - 通过 FTP 从 windows 发送命令到 linux

windows - Windows下如何查找Tomcat安装盘符

Python 请求 head 显示 "301"而 get 返回 "200"