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找不到我的客戶端證書?
如果您使用['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)。 –
@RemyLebeau,我應該首先注意到這個在Azure上運行。真正的過程是在非交互式會話中啓動的,因此我無法看到實際發生的情況。但是,當我通過RDP手動運行程序時,我的證書顯示出來了,當我選擇它時,它會提供我期望的指紋。 – zneak