SSL
SSL 全称 Secure Sockets Layer,是用于在浏览器和服务器之间建立加密连接的协议。
TLS 全称 Transport Layer Security,是 SSL 的继任者,是 SSL 的升级版。
握手过程
HTTPS 保证安全的核心在于非对称加密的特点:公钥加密的密文,只能使用私钥解密。
因此,可以保证,客户端向服务端发送的第三随机数,只有服务端能够解密。
通过非对称加密得到对称加密的密钥,然后通过对称加密进行通信。利用两种加密方式各自的优势
中间人攻击
中间人攻击,就是攻击者截获了服务端的公钥,然后自己生成一个公钥和私钥,将公钥发送给客户端,私钥自己留着。
这样,攻击者即可以解密客户端发送的密文,又可以加密后冒充服务端发送给客户端。
问题就在于客户端如何确认收到的私钥是服务端的还是攻击者的?
为了解决这个问题,需要引入第三方来解决公钥的信任问题,这就是 CA 证书的由来。
CA 证书颁发
申请 CA 证书需要向 CA 机构提交公钥,以及网站相关的信息,CA 机构会生成一个私钥和公钥
CA 机构首先对这些信息以及公钥进行 Hash 运算,得到一个 Hash 值,然后将这个 Hash 值用 CA 机构刚刚生成的私钥加密,得到一个数字签名。
CA 证书的内容包含但不限于:
- 网站信息
- 公钥
- 数字签名和原始的 Hash 值
CA 证书验证
CA 机构不只有一家,为了确保 CA 证书的权威性,需要有其他 CA 机构来负责验证其他 CA 机构的证书,就有一层层验证套娃,这被称为证书链
下面是当前网站(https://dev.peterroe.me)的证书链校验过程,浏览器会逐级向上校验每个证书的数字签名,直到根 CA 为止
根 CA 通常在操作系统中内置
例如当前我可以在系统的找到这个根证书:
具体的校验过程:
如果 CA 证书的网站内容被篡改,那么数字签名将无法通过验证。
由于数字签名是使用 CA 机构的私钥加密的,只有 CA 机构的公钥才能解密,中间人无法既篡改网站内容,又伪造数字签名,所以会导致 CA 公钥解密出来的哈希值一定前后不一致
TIP
核心原因:虽然可以篡改内容,但是无法得到篡改后内容生成的数字签名(这需要生成 CA 证书时的私钥)
参考资料
来自:BV1mj421d7VE