я использую 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
вместо.
Других решений пока нет …