深入理解数字证书和 CA

前置知识

阅读本文前,你需要先学习:

非对称加密的使用场景 这篇文章中,我们学习了非对称加密的两大应用:

  1. 加密通信:用公钥加密,用私钥解密,实现机密通信。
  2. 数字签名:用私钥签名,用公钥验证,证明身份和数据完整性。

但是,非对称加密有一个关键问题没有解决:你怎么确定拿到的公钥是真实可信的?

公钥分发的信任问题

假设你要访问你的银行网站 https://bank.com,银行的服务器会给你发送它的公钥,告诉你:

这是我的公钥,你可以用它加密数据发给我,我用私钥解密。

听起来没问题,但实际上有一个巨大的安全隐患:中间人攻击(Man-in-the-Middle Attack)

想象一下这个场景:

你的电脑 <---> 黑客的电脑 <---> 银行服务器

当你访问 https://bank.com 时,黑客劫持了你的网络请求:

  1. 黑客拦截了银行发给你的真实公钥。
  2. 黑客把自己的公钥伪装成银行公钥发给你。
  3. 你用黑客的公钥加密了你的账号密码,发送出去。
  4. 黑客用自己的私钥解密,窃取了你的账号密码。
  5. 黑客再用银行的真实公钥加密,转发给银行服务器。

在这个过程中,你完全不知道自己正在和黑客通信,还以为在和银行通信。

问题的核心在于:你无法确定收到的公钥确实属于银行,而不是黑客伪造的

这就好比有人给你打电话说「我是银行客服」,你怎么确定对方真的是银行客服,而不是诈骗电话?

解决这个问题,就需要引入一个双方都信任的第三方来做担保,这个第三方就是 证书颁发机构(Certificate Authority,简称 CA)