我已经创建了自签名证明
$ openssl genrsa -out key.pem 1024
$ openssl req -new -key key.pem -out request.csr
$ openssl x509 -req -in request.csr -signkey key.pem -out cert.pem
并创建了一个HTTPS服务器:
var server = https.createServer({
key: fs.readFileSync(__dirname + "/key.pem"),
cert: fs.readFileSync(__dirname + "/cert.pem")
}
然后我请求了该页面。预期的结果是浏览器抱怨连接不安全。我的问题浏览器是如何知道的?验证证书并通知浏览器是否为浏览器作业是服务器作业吗?
答案 0 :(得分:3)
服务器通常会在启动时验证证书是否已损坏或损坏,但大多数服务器实际上并未验证其证书的合法性。
验证服务器证书很重要,否则客户端无法真正知道它与谁通信。 MITM(Man In the Middle)攻击可能发生在第三方拦截通信双方的地方,他们可以向您提供数据,而不是您认为接收的服务器数据。
大多数证书都是由CA签名的,还有自签名证书和固定证书。我建议尽可能使用CA签署的证书。第二个最佳选项(通常只能在组织内使用)将使用您自己的内部CA,然后使用您的CA证书自行签署您的服务器证书,这称为自签名证书,不会受信任由接收它的任何客户或浏览器自动生成。
在自签名选项中,您必须将CA公钥导入CA密钥库,才能使您的服务器证书受信任。最后只有一个固定的证书,这是你只需告诉你的浏览器信任一个不受信任的证书(不要这样做)。
警告 - 您应该避免固定证书,因为在妥协期间几乎无法替换证书,并且证书应安排在合理的时间段内到期,并定期轮换。如果在某些情况下几乎不可能,钉扎会使这非常困难。
证书类型
因此,您拥有证书,首先要将服务器配置为使用该证书。
现在,当客户端出现并请求与您的站点建立安全连接时(如果是HTTPS,则连接到端口443)。您的服务器发送它的公共(非私人)证书并开始安全握手。一次这样的握手称为Diffie–Hellman key exchange。 握手本身超出了这个问题的范围。
在参与密钥交换之前,浏览器将首先检查服务器提供的证书。为了使其有效,必须成功进行几项检查。
执行了一些检查。
此证书是否包含与我们连接的主机名匹配的主机名?
证书是否包含CRL(证书撤销列表)?如果是,那CRL是否表明该证书仍然有效?的 YES / NO 强>
此证书是否由已知的证书颁发机构(CA)签名?的 YES / NO 强>
让浏览器信任证书,并通过代理服务器。然后我们必须检查上面的每个“是”框
现在还有其他不是“特定”的证书也是经过验证的。
例如,客户端和服务器必须就握手方法,使用的密码,使用的散列算法以及其他内容达成一致。
服务器还可以传递特殊的HTTPS安全标志,指示浏览器在一段时间内不信任该服务的其他证书(这称为证书锁定)。像“严格传输安全”中使用的证书固定(不要与上面提到的固定证书相混淆)可以帮助防止MITM(中间人)攻击。这是HTTPS Strict Transport Security提供的众多额外安全功能之一。
一旦所有安全检查都经过认证,浏览器就会向服务器发送任何请求,服务器也会做出相应的响应。
答案 1 :(得分:2)
当您访问受保护的网站(使用https)时,服务器还会发送由权威机构签署的证书以证明其身份(这样您就知道您没有让中等人员进入)。
然后,您的浏览器需要知道证书是否是真品,因为中间的人也可以发送证书。幸运的是,您的浏览器有一个可信任的权限列表。如果证书的权限签名与其中一个受信任的权限匹配,则一切正常并且不会发出警报。
但如果没有权威机构匹配,那么浏览器会问你是否可以相信这个权限。在自签名证书的情况下,您可以信任它(但不能在验证指纹之前,因为再次,中间的人可以发送不同的证书来诱使您相信他们是真正的交易)
如果您信任它,那么浏览器会将其导入并将其添加到要信任的证书中,从不再发出警报(直到您的证书过期或更改为止(例如处于中间情况的人)。
答案 2 :(得分:2)
验证证书并通知浏览器是否为浏览器作业是服务器作业吗?
服务器证书的主要作用是确保客户端与预期的服务器通信。 如果客户端(浏览器)只信任证书有效的服务器,则中间攻击者可能只是声称自己是真实服务器并声称证书有效。在此之后,客户端将建立与攻击者而不是真实服务器的加密连接,这意味着攻击者可以访问敏感数据。因此,客户端必须始终正确检查服务器证书。
我的问题浏览器是如何知道的?
简而言之:通过检查颁发者的签名并遵循信任链直到本地受信任的根证书来检查证书是否可信,还要检查URL的主机名是否与证书的主题匹配,以及证书仍然有效,即未过期且未撤销。有关详细信息,请参阅SSL Certificate framework 101: How does the browser actually verify the validity of a given server certificate?。