2016-08-04 90 views
0

我使用C++代码中的IXMLHTTPRequest3向服务发出请求。这个请求需要伴随着一个客户端证书(这只是IXHR3与IXHR2相比的唯一增加)。在IXMLHTTPRequest3中使用SSL客户端证书

证书的指纹是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找不到我的客户端证书?

+0

如果您使用['CryptUIDlgSelectCertificateFromStore()'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa380288.aspx)选择证书,是否也有同样的问题?参见[这个例子](https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/XmlHttpRequest3GetRequest/cpp/XMLHttpRequest3Get.cpp),它使用[SelectCert()'方法[该实现](https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/XmlHttpRequest3GetRequest/cpp/XMLHttpRequest3Callback.cpp)。 –

+0

@RemyLebeau,我应该首先注意到这个在Azure上运行。真正的过程是在非交互式会话中启动的,因此我无法看到实际发生的情况。但是,当我通过RDP手动运行程序时,我的证书显示出来了,当我选择它时,它会提供我期望的指纹。 – zneak

回答

1

IXHR3只查找CERT_STORE_PROV_SYSTEMCERT_SYSTEM_STORE_CURRENT_USER中的证书,而我的代码是CERT_SYSTEM_STORE_LOCAL_MACHINE

相关问题