本文总结 HTTPS 相关的知识。
HTTP 在数据传输过程中,数据以纯文本的形式传送,未经过加密或其他安全保护措施。这使得 HTTP 通信容易受到中间人攻击的威胁。中间人攻击是指攻击者在通信的两端之间插入自己,能够监视、篡改或窃听通信内容,而通信双方并不知晓攻击的存在。具体来讲,在将 HTTP 数据提交给 TCP 层之后,数据会经过用戶电脑、WiFi 路由器、运营商和目标服务器, 在这中间的每个环节中,数据都有可能被窃取或篡改
如果想要查看我们的访问到达了哪些节点,可以通过 traceroute
命令来查看。
traceroute www.baidu.com
HTTPS 并不是一个新的协议,而是 HTTP 通信接口部分用 SSL 和 TLS 协议代替,所以说 HTTPS 是身披 SSL/TLS 外壳的 HTTP。
安全层有两个主要的职责: 对发起 HTTP 请求的数据进行加密操作和对接收到 HTTP 的内容进行解密操作。
下列我们一起尝试分析 HTTPS 是如何设计的。
采用对称加密算法。在对称加密中,同一个密钥同时用于加密和解密数据。
尽管对称加密提供了较快的加密和解密速度,但密钥的安全分发成为一个挑战,尤其在通过不安全的网络传输密钥时容易受到中间人攻击。
为解决对称加密中密钥安全分发的问题,HTTPS 引入了非对称加密。在非对称加密中,存在一对公钥和私钥,公钥用于加密,私钥用于解密。服务器可以将公钥传输给客户端,而私钥则仅保存在服务器端。客户端使用服务器的公钥对数据进行加密,只有服务器的私钥能够解密这些数据。这样,即使公钥被攻击者截获,也不会影响数据的安全性。
非对称加密通过使用公私钥对解决了密钥安全分发的问题,但其计算复杂度较高,因此在实际通信中,通常使用对称加密来加密实际的数据传输,而使用非对称加密来安全地交换对称密钥。
目前的 HTTPS 设计结合了对称加密和非对称加密的优势。在初始握手阶段,服务器和客户端使用非对称加密进行密钥交换,确保密钥的安全传输。一旦密钥交换完成,双方采用对称加密算法进行后续的数据传输,以提高效率。
方案三其实存在一个问题:攻击者可能会冒充服务器,欺骗客户端,并在握手过程中替代服务器的公钥。这样,客户端将使用攻击者提供的公钥来加密对称密钥,从而使得攻击者能够解密和篡改后续的通信。这是一种中间人攻击的风险。
为此,HTTPS 引入了数字证书
-
申请证书:服务器或个体希望获得数字证书时,他们向证书颁发机构(CA)提交证书签发请求。这个请求包括公钥以及与公钥相关的身份信息。
-
身份验证:CA 会对证书请求进行身份验证。这通常包括验证请求中提供的身份信息,确保请求者拥有对应私钥的控制权。
-
生成密钥对:如果身份验证成功,CA 会为请求者生成一对密钥,包括公钥和私钥。公钥会包含在数字证书中,而私钥保留在请求者的控制下。
-
创建证书:CA 使用其私钥对请求者的公钥和其他相关信息(如身份信息)进行数字签名,形成数字证书。数字签名是由 CA 的私钥生成的加密值,可以验证证书的真实性。
-
分发证书:CA 将生成的数字证书分发给请求者。这个数字证书包含了请求者的公钥、身份信息以及 CA 的数字签名。
-
证书验证:当客户端与服务器进行通信时,服务器会将其数字证书发送给客户端。客户端会使用 CA 的公钥来验证数字签名的真实性,确保证书是由 CA 签发的。
-
密钥交换:如果数字证书验证成功,客户端就可以信任服务器的公钥。然后,客户端和服务器可以使用非对称加密进行安全的密钥交换,以便建立后续通信的对称密钥。
-
安全通信:一旦密钥交换完成,客户端和服务器之间的通信就可以使用对称密钥进行加密和解密,确保通信的机密性和完整性。
添加数字证书后的流程如下: