如果需要为每一个 Blocklet 配置一个子域名,并且都在相同的二级域名下。那么可以为这些子域名生成通配符证书。比如说,假如我们这些 Blocklet 的二级域名都是 arcblockio.cn, 那么我们可以生成一个域名为 *.arcblockio.cn 的证书。
本文介绍如何在 CentOS 系统中,使用 Certbot 和阿里云 DNS 生成一个 Let’s Encrypt’s 通配符证书。
注意
*.arcblockio.cn 只会匹配像这样的域名:
a.arcblockio.cnb.arcblockio.cn
不会匹配更多级域名,比如:
c.a.arcblockio.cnd.a.arcblockio.cn
安装 Certbot
因为 Certbot 的官方插件列表中没有阿里云 DNS, 所以这里只安装 certbot, DNS 需要手动配置一下。
sudo yum install certbot
其它平台的安装方式可以在官网找到。
手动生成证书
我们选择生成独立的证书,而不是直接和 Web 服务绑定,所以我们需要在命令行中指定 certonly 和 --manual:
1. 执行命令
sudo certbot certonly --manual -d '*.arcblockio.cn' -d arcblockio.cn --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
-d: 这里指定了两个值:*.arcblockio.cn, arcblockio.cn, 如果只设置了*.arcblockio.cn, 那么域名www.arcblockio.cn不会生效--preferred-challenges: 使用 dns 的方式进程域名的认证--server: 默认会使用 Let’s Encrypt’s 的生产服务器,如果是测试的话,且生成的证书比较多,可以使用该参数指定为测试服务器:--server https://acme-staging-v02.api.letsencrypt.org/directory
2. 输入邮箱,用来接收更新和安全通知
3. 同意协议
需要同意一些协议:
4. 验证域名
Certbot 会要求在 DNS 服务器配置两个 TXT 记录:
可以使用 host 命令校验记录是否生效了:
在 DNS 记录生效以后,再按确认键确认生成证书。
阿里云 DNS 解析不能为一个记录添加多个值,所以只能添加两个相同的 TXT 记录(\acme-challenge.arcblockio.cn)_
5. 生成证书
生成好的证书放在了 /etc/letsencrypt/live/[域名] 目录中:
6. 举例:在 Nginx 中配置证书
server {
server_name abtnode.arcblockio.cn;
listen 443 http2 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/arcblockio.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/arcblockio.cn/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}