搭建网站时都会面临配置 SSL 证书的问题。我现在使用的是 certbot,可以检测到 Nginx 服务器的 server_name,自动向 Let’s Encrypt 申请 SSL 证书,并且在证书过期之前自动更新之。

但是我在进行域名购买、备案时,经常会看到阿里云的证书申请广告:

CleanShot 2023-06-17 at 15.21.34@2x

那么问题就是,既然 Let’s Encrypt 已经提供了免费的 CA 证书,为什么诸如阿里云等厂商依旧对证书申请收费呢?


我们先想一想 SSL 的目的是什么:我们不想让除了客户端(client)和服务端(server)之外的任何人知道我们的 HTTP 报文内容。

SSL 证书提供了两样功能:加密(encryption)和鉴权(authentication)。我们用一个简单的例子来理解两者的区别:

假设 A 和 B 是两个国家的特务,他们现在需要交换情报。由于两人不能见面,只能通过写信的方式间接联系,因此他们决定对情报内容进行加密

如果 A 和 B 提前打好招呼,说“我们一起用密钥 K 进行加密吧“,那么两者直接按照商定的方式写信即可。但问题是,A 和 B 自始至终都只能通过公开的信件交流,他们只知道对方是特务,想要交换情报,但并没有对密钥 K 达成一致

怎么做到这一点呢?直接将 密钥 K 用信件发送给对方是没有意义的,因为中间人可以直接伪造一个 密钥 K’ 发给特务,特务无从得知这是否是对方的密钥。他们需要一个权威人士来保证密钥 K 是可信的

如果有一个权威的特务 C,A 和 B 都可以当面找 C 去验证,那么事情就简单了:先让特务 C 跟特务 A 当面商量好密钥,把密钥发给特务 B 后,B 再去找 C 确认这个是 A 发来的密钥即可。

类比 SSL 证书,想要使用密钥对 HTTP 报文进行加密很简单,难的是怎么让客户端相信这个是服务端发来的密钥。我们同样引入一个权威人士,这就是证书颁发机构(CA)。

对于开发者来说,SSL 证书需要向 CA 申请才能获得。用户拿到 SSL 证书之后也需要和 CA 确认无误后才相信他,因此 SSL 证书的颁发是有成本的

那为什么 Let’s Encrypt 这样的机构可以做到免费呢?有以下三个原因:

  1. 有金主。现在的互联网企业比用户自己更关心通信安全,因此大量的科技厂商为 Let’s Encrypt 赞助。

    CleanShot 2023-06-17 at 15.22.51@2x

  2. 功能有限。他们只支持进行域名验证(Domain Validation),并不支持组织验证(Organization Validation)或是扩展验证(Extended Validation)。用户只能知道这个域名是安全的,但并不知道这个域名属于谁。假设域名到期被域名商回收,黑客完全可以购买此域名后伪装自己是原服务器,用户无法得知当前域名的所有者。

  3. 运营成本低。他们使用 ACME 协议自动化整个鉴权过程,因此减少了大量的人工运营成本。对于一个个人开发者来说,这种自动化鉴权过程减少了维护时间。但对于企业来说,缺少身份认证可能会导致灾难。

Reference Link to heading

https://security.stackexchange.com/questions/45491/why-can-ssl-certificates-not-be-free-of-charge