Let’s Encrypt 安装通配符证书
不用为二级域名申请证书了,但是有效期只有 3 个月。
安装 certbot
官网:https://certbot.eff.org
certbot 官网有安装向导。打开向导页面,选择你对应的操作系统和网页服务器,它会告诉你怎么做。
1 | # Apache on Ubuntu 18.04 LTS (bionic) |
申请证书
这一步需要更改 DNS 的解析记录,有个坑要注意一下:更改 DNS
记录要等大约 10 分钟才生效,最好用 screen
或者其他命令保证终端不会超时退出。
1 | certbot certonly -d "*.beanbang.cn" -d "beanbang.cn" --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory |
certonly
表示插件,Certbot 有很多插件。不同的插件都可以申请证书,用户可以根据需要自行选择。-d
为哪些主机申请证书。如果是通配符,输入 *.xxx.com (根据实际情况替换为你自己的域名)。--preferred-challenges dns-01
使用 DNS 方式校验域名所有权。--server
Let's Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。
执行之后会有提示你记录 IP 地址之类的,确定就是了。之后会提示需要你验证你的域名:
1 | Please deploy a DNS TXT record under the name |
括号里的内容说,不要删除和改动先前的记录,你可能被要求向同一个名字(二级域名)添加多条 TXT 记录,这个是 DNS 标准所允许的。
去域名服务商的控制台添加解析记录。改完之后,新建一个连接,用
dig
命令来测试。
1 | dig -t txt _acme-challenge.beanbang.cn |
改完解析记录没有立刻生效的话,可以手动刷新一下主机的 DNS 缓存再查。不同的 DNS 缓存服务刷新的命令不同:
1 | # Systemd Resolved |
如果你发现解析记录已经成功改变了,就可以按下回车。
成功之后会有下面的提示:
1 | Waiting for verification... |
这时候应该能看到 /etc/letsencrypt/live/[域名]
下的证书文件:
1 | ls /etc/letsencrypt/live/beanbang.cn/ |
四个证书文件
查了一下文档1,这四个证书文件分别的不同用途,大概是这样:
privkey.pem
证书的私钥,必须时刻保护好。不能公开给任何人。
配置项:Apache 的
SSLCertificateKeyFile
,Nginx 的ssl_certificate_key
。fullchain.pem
完整的证书密钥链(certificate chain),包括服务端证书(server/leaf certificate)和中间证书(intermediate certificate)。在文件最开头第一个是服务端证书,接下来的是中间证书。
配置项: Apache >= 2.4.8 的
SSLCertificateFile
,Nginx 的ssl_certificate
。cert.pem
和chain.pem
(较少用)cert.pem
包含了服务器端证书,chain.pem
包含了中间证书。假如你要使用它们,必须两个文件一起使用,不然浏览器会提示“链接不受信任”。配置项:Apache < 2.4.8 的
SSLCertificateFile
和SSLCertificateChainFile
。启用了 OSCP 的 Nginx >= 1.3.7,需要将ssl_trusted_certificate
设置为chain.pem
。
配置网页服务器
Apache
找到 Apache 的配置文件
httpd-ssl.conf
,并且修改相应的内容,把证书添加上去。
1 | cd /opt/lampp |
1 | <VirtualHost 0.0.0.0:443> |
Nginx
1 | vim /etc/nginx/conf.d/blog.beanbang.cn.conf |
1 | server { |
更新证书
通配符证书似乎不支持用 certbot renew
来更新,重新执行一下上面申请证书的命令来更新证书。证书时长是三个月,在到期的前
10 天 Let's Encrypt 会发邮件提醒你的。
参见:
Let’s Encrypt 安装通配符证书
https://blog.beanbang.cn/2020/04/06/install-wildcard-certificate-using-lets-encrypt/