2016-08-04 17 views
0

Ich verwende IXMLHTTPRequest3 aus C++ - Code, um eine Anforderung an einen Dienst auszugeben. Diese Anfrage muss von einem Client-Zertifikat begleitet werden (das ist nur das einzige, was IXHR3 über IXHR2 hinzufügt).Verwenden eines SSL-Client-Zertifikats mit IXMLHTTPRequest3

das Fingerabdrucks Attest ist 8D1CC03002D7872230516B5C5BA1090084D68ED0, und ich habe festgestellt, dass es auf dem Computer installiert ist:

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

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

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

Allerdings, wenn ich versuche, dieses Fingerabdrucks zu IXHR3->SetClientCertificate passieren, ich zurück 0x80092004 CRYPT_E_NOT_FOUND.

I umgewandelt, um den Hash aus einem Hex-String in eine Reihe 20-Byte (durch Automatisierung Trans Fehler an meinem Ende zu vermeiden) und mein Aufruf sieht wie folgt aus:

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

Die Frage, klar ist: Warum kann IXHR3 mein Kundenzertifikat nicht finden?

+0

Haben Sie das gleiche Problem, wenn Sie ['CryptUIDlgSelectCertificateFromStore()'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa380288.aspx) verwenden, um das Zertifikat auszuwählen? Siehe [dieses Beispiel] (https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/XmlHttpRequest3GetRequest/cpp/XMLHttpRequest3Get.cpp), das eine 'SelectCert()' Methode von [dieser Implementierung verwendet ] (https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/XmlHttpRequest3GetRequest/cpp/XMLHttpRequest3Callback.cpp). –

+0

@RemyLebeau, ich sollte zuerst beachten, dass dies auf Azure läuft. Der eigentliche Prozess wird in einer nicht-interaktiven Sitzung gestartet, so dass ich nicht sehen kann, was dort wirklich passiert. Wenn ich das Programm manuell über RDP ausführe, wird jedoch mein Zertifikat angezeigt. Wenn ich es auswähle, wird der gewünschte Fingerabdruck angezeigt. – zneak

Antwort

1

IXHR3 sucht nur nach Zertifikaten in CERT_STORE_PROV_SYSTEM ->CERT_SYSTEM_STORE_CURRENT_USER, und meine war in CERT_SYSTEM_STORE_LOCAL_MACHINE statt.

Verwandte Themen