用Let’s Encrypt申请免费证书,你需要掌握的如下知识点:
Let’s Encrypt用客户端来申请免费证书;
Let’s Encrypt有多种客户端工具可供选择,本系列本文选用Certbot客户端。
Let’s Encrypt用客户端来申请免费证书,首先要验证域名所有权;
Certbot客户端提供了三种验证域名所有权验证方式,本文选用standlone方式。
Table of Contents
Let’s Encrypt申请证书简介
1.Let’s Encrypt申请证书,分两大部分
一是要证明你对你的域名有控制权,防止你为别人申请证书。
二是证书的颁发和吊销。
工作原理:https://letsencrypt.org/zh-cn/how-it-works/
2.Let’s Encrypt 支持三种证书
1)单域名证书:证书仅仅包含一个域名。
2)Multi-domain (SAN) Certificates(SAN 证书)
Our issuance policy allows for up to 100 names per certificate.
一张证书可以包括多个域名(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机:www.example.com、www.example.cn、blog.example.com 等等。
3)通配符证书
通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。
3 Let’s Encrypt 的客户端
客户端用于申请、删除、管理服务器上的域名证书。
申请Let's encrypt证书,既可以使用certbot官方客户端工具,也可以使用第三方客户端工具如:acme.sh,各有所长
Let’s Encrypt 的常见的客户端有两种:
2.1.1 certbot-auto
2.1.2 certbot
2.1.3 acme.sh
certbot-auto 和 certbot 的不同之处在于运行 certbot-auto 会自动安装它自己所需要的一些依赖,并且自动更新,推荐使用(因为各个 Linux 发行版的仓库,更新不是很及时)。
4. certbot 的版本选择
4.1 Certbot v2.2.0 and older
https://eff-certbot.readthedocs.io/en/stable/using.html#manual
4.2 Certbot v2.3.0 and newer
https://eff-certbot.readthedocs.io/en/stable/using.html#manual
3. Let’s Encrypt 校验域名的所有权
客户在申请 Let’s Encrypt 证书的时候,首先需要校验域名的所有权,证明操作者有权利为该域名申请证书。
目前支持验证方式有2种:
1.DNS验证方式 注意:申请通配符证书,只能使用 dns-01 的方式
2.文件验证
DNS验证dns-01
DNS验证的原理是你需要创建一条TXT的记录,设置指定值,certbot检查到这条记录就完成验证。给域名添加一个 DNS TXT 记录。
文件验证方式http-01
在域名https://example.com/ 的已知 URI 下对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。
tls-sni-01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。
文件验证的原理是在你的网站下面放一个验证文件(/.well-known/acme-challenge/目录下),certbot通过域名直接访问到这个验证文件,能访问到说明是你的网站,也就可以申请证书。
两种方式各有其适用场景,对于自己可以控制的域名,直接通过DNS验证是最便捷的,不需要任何nginx的辅助就可以完成申请和续期。
如果是给客户提供服务,并没有域名的控制权,就只能使用文件验证的方式。假如使用了DNS的验证方式,客户首次申请是要手动改DNS记录,等到过期后,也不能自动续期,需要再次手动调整DNS记录。
为保证域名正常续期,使用文件验证的方式。
3.Certbot支持两种类型的plugin
3.1 Authenticators
用来获取证书
3.2 Installers
用来安装证书
4.Certbot常用的plugin简要说明
Certbot provides a variety of ways to obtain SSL certificates through plugins:
webroot
standone
nginx
source:https://eff-certbot.readthedocs.io/en/stable/using.html#certbot-commands
certbot 有两种方式验证域名所有权后生成证书
Webroot方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件(即创建隐藏文件.well-known), Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。获取证书时无需暂停webserver的运行。
certbot certonly --webroot -d liuhaolin.com -d www.liuhaolin.com -w /website/mysite --register-unsafely-without-email
standalone 方式: certbot 自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先停止服务,释放出80 或 443 端口,否则会出现端口被占用。
服务器未运行webserver可以使用该方式,要保持80或443端口开放。
Nginx:自动获取和安装证书(自动修改配置文件)
DNS Plugins: 泛域名支持,可以使用DNS Plugins来实现。