什么是 Let’s Encrypt?
部署 HTTPS 网站的时候需要证书,证书由 CA (Certificate Authority )机构签发,大部分传统 CA 机构签发证书是需要收费的,这不利于推动 HTTPS 协议的使用。Let’s Encrypt 也是一个 CA 机构,但这个 CA 机构是免费的!!!也就是说签发证书不需要任何费用。
什么是通配符证书?
在没有出现通配符证书之前,Let’s Encrypt 支持两种证书。
1)单域名证书:证书仅仅包含一个主机。
2)SAN 证书:一张证书可以包括多个主机(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机:www.example.com、www.example.cn、blog.example.com 等等。
证书包含的主机可以不是同一个注册域,不要问我注册域是什么?注册域就是向域名注册商购买的域名。
对于个人用户来说,由于主机并不是太多,所以使用 SAN 证书完全没有问题,但是对于大公司来说有一些问题:
- 子域名非常多,而且过一段时间可能就要使用一个新的主机。
- 注册域也非常多。
读者可以思考下,对于大企业来说,SAN 证书可能并不能满足需求,类似于 sina 这样的网站,所有的主机全部包含在一张证书中,而使用 Let’s Encrypt 证书是无法满足的。
Let’s Encrypt 通配符证书
通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,读者很快明白,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。
这个功能可以说非常重要,从功能上看 Let’s Encrypt 和传统 CA 机构没有什么区别了,会不会触动传统 CA 机构的利益呢?
为什么选择Let’s Encrypt?
Let’s Encrypt和其他认证机构的区别:
如何申请 Let’s Encrypt 通配符证书
安装Certbot
从官方源安装最新版certbot(最新版为0.22.0,从0.22.0版本才开始支持泛域名申请)
wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto
初始化
./certbot-auto
获取证书
因为目前大多数国内的DNS服务商不在API支持的列表里,所以以下使用手动方式进行DNS认证,只要将下方命令中的*.thinkbig.com
替换为自己的域名即可。注意!域名的 minirplus.com
解析记录必须以 A记录
方式指向当前运行命令的服务器IP,而不能使用CNAME记录。
./certbot-auto certonly --manual -d *.thinkbig.com --agree-tos --no-bootstrap --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
输入邮箱
,用于接收证书过期通知:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
接着会出现一段广告,大意是收集客户邮箱给赞助商,Y
或 N
均可
------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o:
接着重要的部分来了,在域名注册商的网站,解析记录中添加一个 _acme-challenge
前缀的域名 TXT记录
,记录的内容为中间显示的随机码xVloe7V1kMEd2ZlOLlUxv-HltYfTDaMhrrwKjFU47DU
------------------------------------------------------------------------------- Please deploy a DNS TXT record under the name _acme-challenge.minirplus.com with the following value: xVloe7V1kMEd2ZlOLlUxv-HltYfTDaMhrrwKjFU47DU Before continuing, verify the record is deployed. ------------------------------------------------------------------------------- Press Enter to Continue
接着确保当前域名的根记录 thinkbig.com 为 A记录
并且指向当前服务器IP(这条原本不成问题,因为国外的服务商的DNS根域名只能添加A记录,但是国内的DNSPOD则更加灵活,可以添加CNAME记录,所以会在认证的时候出现问题)
按回车,进行认证
等待片刻,出现如下信息,说明认证成功
申请操作成功后, 会在界面中输出证书的存放路径, 以及证书的到期时间 (90天)
Let’s Encrypt 由于是非盈利性的组织,需要控制开支,他们搞了一个非常有创意的事情,设计了一个 ACME 协议,目前该协议的版本是 v1。那为什么要创建 ACME 协议呢,传统的 CA 机构是人工受理证书申请、证书更新、证书撤销,完全是手动处理的。而 ACME 协议规范化了证书申请、更新、撤销等流程,只要一个客户端实现了该协议的功能,通过客户端就可以向 Let’s Encrypt 申请证书,也就是说 Let’s Encrypt CA 完全是自动化操作的。
Let's Encrypt为了自动生成电子证书搞了一个ACME协议
- Automatic Certificate Management Environment=ACME,自动认证管理环境协议
- 协议草案已经提交IETF
- ACME协议的基本思路是:
- 在你服务器上生成一次性的随机特征数据(nonce)
- 然后通过Let’s Encrypt的服务器核对这个数据
- 核对成功发放证书
- 有两种方式,HTTP和DNS,一般使用的是前者