如何验证自签名证书?

时间:2015-08-10 00:46:01

标签: c++ ssl winhttp

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

1 个答案:

答案 0 :(得分:1)

极大地过度简化:客户端使用受信任的证书颁发机构的硬编码列表来验证服务器的证书。证书颁发机构列表是烘焙到客户端的证书的内部列表,客户端验证服务器提供的证书是否由客户端信任的证书颁发机构签名。

所以,无论你最终做什么,你的客户都必须保留一些它信任的证书列表。这是TLS信任模型的一个基本方面。您只需将自签名证书包含在客户端中,客户端就会验证您的服务器是否提供了相同的证书。

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