如何在WinHttp

时间:2017-12-05 16:09:58

标签: ssl winapi certificate wininet winhttp

我正在开发一个客户端 - 服务器应用程序,其中服务器是一个基于SSL证书执行客户端验证的Web服务器。服务器信任根CA证书。客户端是一个用C ++开发的Windows应用程序,它有一个由中间CA签名的证书,后者由根CA签名。 我可以通过使用 WINHTTP_OPTION_CLIENT_CERT_CONTEXT 作为选项调用 WinHttpSetOption api来在https连接期间设置客户端证书。但是,这只会设置客户端证书,但不会设置整个链。服务器在其存储中没有中间CA,因此无法对客户端进行身份验证。

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

2 个答案:

答案 0 :(得分:0)

服务器必须预先拥有CA证书,它不会信任客户端提供的根CA. (我不确定它(服务器端)是否会信任由受信任的CA签署的中间CA,但我倾向于拒绝)。

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

答案 1 :(得分:-1)

我只能找到将Sub CA添加到系统存储区。在服务启动或安装期间,打开CA证书存储区并向其添加证书上下文。