Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何验证自签名证书?_C++_Ssl_Winhttp - Fatal编程技术网

C++ 如何验证自签名证书?

C++ 如何验证自签名证书?,c++,ssl,winhttp,C++,Ssl,Winhttp,我目前正在编写一个桌面应用程序,它需要通过https(带有自签名证书)与远程服务器上的PHP脚本通信。服务器-客户机通信代码仍处于计划阶段,但是,因为我还没有弄清楚如何验证(在客户机上)我实际上正在与服务器通信。我假设有某种方法可以使用证书验证服务器身份。我打算使用WinHTTP进行https通信,前提是它具有我所需的所有功能。大大简化了事情:客户端通过使用硬编码的可信证书颁发机构列表来验证服务器的证书。证书颁发机构列表是烘焙到客户机中的证书的内部列表,客户机验证服务器提供的证书是否由客户机信任

我目前正在编写一个桌面应用程序,它需要通过https(带有自签名证书)与远程服务器上的PHP脚本通信。服务器-客户机通信代码仍处于计划阶段,但是,因为我还没有弄清楚如何验证(在客户机上)我实际上正在与服务器通信。我假设有某种方法可以使用证书验证服务器身份。我打算使用WinHTTP进行https通信,前提是它具有我所需的所有功能。

大大简化了事情:客户端通过使用硬编码的可信证书颁发机构列表来验证服务器的证书。证书颁发机构列表是烘焙到客户机中的证书的内部列表,客户机验证服务器提供的证书是否由客户机信任的证书颁发机构之一签名

因此,无论您最终做了什么,您的客户机都必须保留它信任的某种证书列表。这是TLS信任模型的一个基本方面。您可以简单地将自签名证书包含在客户机中,然后客户机验证您的服务器是否提供了相同的证书


但正确的答案是运行自己的证书颁发机构。这需要一些额外的前期准备工作,但最终结果会更好。您的客户端在其信任列表中只有一个受信任的证书颁发机构,而不是包含在您的操作系统或浏览器中的几十个左右的标准证书颁发机构:您自己的证书颁发机构,您的客户端将验证您的服务器的证书是否由您的证书颁发机构签名。

为了简单起见,我想第一个解决方案就是我要使用的。我遇到了一个答案,似乎是将此解决方案与WinHTTP结合使用。尽管我可以在如何实施检查方面得到一些帮助。我是否会暂停与服务器联系的函数,直到回调得到满足?我碰巧认为简单地用您自己的证书颁发机构列表替换TLS堆栈的证书颁发机构列表,并简单地让您的堆栈按照通常的方式设置TLS连接要简单得多,不要在设置自己的证书验证回调时兜圈子,然后担心如何正确验证服务器的证书、检查有效性/过期时间等等。。。