SSL 证书由客户端验证。
服务器通常会在启动时验证证书没有损坏或损坏,但大多数服务器实际上并不验证其证书的合法性。
为什么要验证证书?
验证服务器证书很重要,否则客户端无法真正知道它正在与谁通信。 MITM(中间人)攻击可能发生在第三方拦截通信双方的情况下,他们可以向您提供他们的数据,而不是您认为您正在接收的来自服务器的数据。
关于证书类型的一点点
大多数证书由 CA 签名,也有自签名证书和固定证书。我建议尽可能使用由 CA 签署的证书。第二个最佳选项(通常只能在组织内使用)将使用您自己的内部 CA,然后使用您的 CA 证书自签名您的服务器证书,这被称为自签名证书,它不会被信任由任何接收它的客户端或浏览器自动生成。
在自签名选项中,您必须将您的 CA 公钥导入您的 CA 密钥库,以使您的服务器证书受到信任。最后有一个简单的固定证书,在这里您只需告诉浏览器信任其他不受信任的证书(不要这样做)。
警告 - 您应该避免固定证书,因为它们在入侵期间几乎不可能被替换,并且证书应该安排在合理的期限内到期,并定期轮换。在某些情况下,即使几乎不可能,固定也非常困难。
证书类型
- CA 签名(需要在 WWW 上运行安全站点)
- 自签名(适合内部组织使用,例如公司内部 wiki)
- 固定(避免)
会发生什么样的验证?
所以你有一个证书,首先你配置你的服务器来使用那个证书。
现在,当客户端出现并请求与您的站点建立安全连接时(如在 HTTPS 情况下连接到端口 443 所示)。您的服务器发送它的公共(非私有)证书并开始安全握手。一种这样的握手称为Diffie–Hellman key exchange。 握手本身超出了这个问题的范围。
在参与密钥交换之前,浏览器将首先检查服务器提供的证书。要使其有效,必须成功进行多项检查。
执行了一些检查。
让浏览器信任证书,并通过代理服务器。然后我们必须检查上面的每个“是”框
其他让世界更安全的安全产品
现在还有其他不是证书“特定”的东西也经过验证。
例如,客户端和服务器必须就握手方法、使用的密码、使用的散列算法等达成一致。
服务器还可以传递特殊的 HTTPS 安全标志,指示浏览器在一段时间内不信任此服务的其他证书(这称为证书固定)。像“严格传输安全”中使用的证书固定(不要与上面提到的固定证书混淆)可以帮助防止 MITM(中间人)攻击。这是HTTPS Strict Transport Security 提供的众多额外安全功能之一。
一旦所有的安全检查都通过了认证,浏览器就会向服务器发送它所拥有的任何请求,并且服务器会做出适当的响应。