为什么 WinHttp 不发送带链的客户端证书?

Why WinHttp does not send client certificate with chain?

我正在开发一个客户端-服务器应用程序,其中服务器是基于 SSL 客户端证书执行客户端身份验证的 Web 服务。客户端证书由 Root-CA -> Intermedia-CA-1 -> Intermedia-CA-2 颁发。我将证书导入到用户证书存储和证书机器存储中。

使用 WinHttpSetOption(request, WINHTTP_OPTION_CLIENT_CERT_CONTEXT, (LPVOID)pCertCtx, sizeof(*pCertCtx)) 设置客户端证书。

当从用户存储中搜索 pCertCtx 时,WinHttp 发送客户端证书和中间 CA。

但是当从本地计算机存储或内存中的证书存储中搜索 pCertCtx 时,WinHttp 只发送客户端证书,不发送中间 CA。

为什么 WinHttp 在这些方面有不同的行为?是否有任何选项可以强制 WinHttp 始终发送证书和链?

通过将 intermedia ca 添加到 machine store 解决。