互联网是由无数网络节点组成的,两点之间的通信一般会经过很多个网络节点,因此,我们难免会有疑问:
本文就从网络通信的安全性出发,解密HTTPS原理。
如果你把消息内容暴露在互联网传输,中间人是有办法拦截偷看的。所以要加密: 发送方把消息内容放在箱子里面锁起来发送出去,接收方再用对应的钥匙解锁。别人没有钥匙,自然就无法知道箱子里面的消息内容。这就达到了防止数据被窃听的目的。
这里加密和解密用的是同一个秘钥,所以叫对称加密。常用的对称加密算法有AES。
对称加密最大的问题就是秘钥交换和秘钥管理。因为加解密用的是同一个密钥,所以当你把加密的秘钥告诉别人的同时,就有可能泄漏了解密的秘钥。另外,如果是多个发送方对一个接收方的场景,接收方就需要维护多个秘钥,不方便管理。
把加密和解密的密钥分开管理: 接收方自己保管好解密的密钥(私钥),然后把加密的密钥提供给发送方(公钥),从而解决秘钥交换的问题,这就是非对称加密。常见的算法有RSA。
首先,为了保证只有接收方能够解密,应该由接收方创建密钥对。其次,接收方自己保管私钥,并把公钥告诉发送方。最终,发送方用公钥加密的数据,只有接收方的私钥能够解密。
实际应用中不会直接用非对称加密对话,因为其算法复杂计算耗时长。更常见的是用非对称加密完成秘钥交换,再用对称加密会话。在正式会话之前,接收方创建一个随机的对称加密的秘钥。然后,通过非对称加密方式发给发送方。最后,用这个秘钥进行对称加密会话。即保证了数据传输的安全性,又能高效地处理加解密。
为了防止数据被窃听,需要对数据进行加密传输。对称加密使用同一个秘钥进行加解密,简单高效,不足之处是存在秘钥交换和秘钥管理的问题。因此,非对称加密把加密和解密的密钥分开管理: 接收方自己保管好解密的密钥(私钥),然后把加密的密钥提供给发送方(公钥);缺点是算法复杂计算耗时长。综上,一般使用非对称加密来完成秘钥交换,然后用对称加密进行会话。即保证了数据传输的安全性,又能高效地处理加解密。
平时我们收到快递,可以核对防伪码来防止东西被调包。在网络通信中,也有一个类似防伪码的机制来防止数据被篡改,这就是摘要。
摘要是对原始数据进行压缩生成的唯一标识,不同的数据生成的摘要是不同的。如果原始数据生成的摘要跟报文中的摘要不匹配,则说明数据已被篡改。常用的摘要算法有MD5和SHA-1。
如果中间人修改了原始数据,再生成新的摘要,也是能验证通过的。所以怎么验证报文中的摘要就是发送方生成的呢?
前面讲到了非对称加密,用公钥加密只有私钥能解密,反过来也是成立的,即能用公钥解密的数据一定是用私钥加密的。因为私钥只有一个人知道,所以就能确定发送方身份。首先,为了验证摘要是发送方生成的,应该由发送方生成密钥对。其次,发送方自己保管私钥,并且把公钥提供给接收方。最后,发送方用私钥加密摘要,接收方用公钥解密得到摘要,确认对方身份,然后再进行摘要验证。这样就能有效验证数据完整性和身份验证,这就是数字签名。
在建立HTTPS安全链接时,服务器会返回一个公钥给浏览器,用于非对称加密完成密钥交换。那么,浏览器怎么核实公钥的有效性呢?
我们都知道乘坐高铁时,工作人员会要求乘客出示身份证以便核实身份。身份证是由具有权威性的公安机关颁发的,所以能够有效证明公民身份。
在网络通信中,也有类似身份证的机制来核实公钥的有效性,这就是数字证书。
首先,网站要找CA机构申请数字证书: CA机构用私钥对服务器的公钥做加密,生成数字证书。其次,在开始建立HTTPS安全链接时,服务器返回数字证书。最后,浏览器用CA机构的公钥对数字证书做解密,得到服务器的公钥。因为只有CA机构知道私钥,所以能够解密成功就说明证书内容是合法的,即服务器公钥是有效的。
最后一步可能同学会有疑问: 浏览器是怎么知道CA机构的私钥的?因为全球权威的CA机构并不多,所以他们的私钥是直接内嵌在浏览器内核的。
互联网环境错综复杂,网络通信的安全性更是不容小嘘。首先,使用非对称加密完成秘钥交换,再用对称加密传输,防止数据被窃听; 其次,用数字签名来验证数据完整性和身份验证,防止数据被篡改; 最后,通过数字证书核实网站身份,防止身份冒充。综上所述,这三个核心技术保障了HTTPS通信的安全性。
什么是 HTTPS 的证书信任链?自己给自己发行不行?
一直没明白的 HTTPS,今天懂了!
了解 HTTP 看这一篇就够
(建议收藏)前端面试必问的十六条HTTP网络知识体系
爱奇艺海外版HTTPS效率是如何提升的?