Ssl 如何在WinHttp中设置客户端证书链

Ssl 如何在WinHttp中设置客户端证书链,ssl,winapi,certificate,wininet,winhttp,Ssl,Winapi,Certificate,Wininet,Winhttp,我正在开发一个客户机-服务器应用程序,其中服务器是基于SSL证书执行客户机验证的web服务器。服务器信任根CA证书。Client是一个C++开发的Windows应用程序,它有一个由中间CA签名的证书,而Root CA.又签署了这个证书。 我可以在https连接期间通过调用WinHttpSetOption api设置客户端证书,并将WINHTTP\u OPTION\u client\u CERT\u上下文作为选项。但是,这将只设置客户端证书,而不是整个链。服务器的存储中没有中间CA,因此无法对客户

我正在开发一个客户机-服务器应用程序,其中服务器是基于SSL证书执行客户机验证的web服务器。服务器信任根CA证书。Client是一个C++开发的Windows应用程序,它有一个由中间CA签名的证书,而Root CA.又签署了这个证书。 我可以在https连接期间通过调用WinHttpSetOption api设置客户端证书,并将WINHTTP\u OPTION\u client\u CERT\u上下文作为选项。但是,这将只设置客户端证书,而不是整个链。服务器的存储中没有中间CA,因此无法对客户端进行身份验证


如果完整的客户端证书链已经存在于客户端的证书存储中,有没有办法在WinHttp中设置完整的客户端证书链?

服务器必须事先拥有CA证书,它不会信任客户端交给它的根CA。我不确定服务器端是否会信任由可信CA签名的中间CA,但我倾向于拒绝


信任客户端发送的一些随机CA会破坏整个证书验证点,您将不知道客户端提交的数据是否真正有意义。因此,将根CA证书和中间CA证书添加到服务器的证书存储中。如果您没有访问权限,您必须与管理员交谈并让他们进行操作。

我唯一能找到的是将子CA添加到系统存储中。在服务启动或安装过程中,打开CA证书存储并向其中添加证书上下文。

服务器有一个它信任的根CA,例如“a”。客户端有一个证书,上面写着“C”。它派生自证书A->B->C,其中证书B是服务器没有的中间证书。