https泛域名证书申请

背景

  先前www.shinyruo.xyz域名使用的https证书采用certbot申请,该种方式申请泛域名的证书较为复杂,且不支持纯IPv6环境的证书申请,因此需要寻找一种新的证书申请方式。

解决方案

  使用acme.sh申请证书,按照参考链接[1]中官方文档给出的教程执行,可以成功在纯IPv6环境下申请单域名证书,多域名方式则使用参考链接[2]的方式。最终使用脚本方式执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 申请的域名
DOMAIN=shinyruo.eu.org
# cloudflare apikey
export CF_Key=cloudflare_key
# cloudflare email
export CF_Email=cloudflare_email
# 停止openresty
systemctl stop openresty
# 在纯IPv6环境需要添加--listen-v6,--dns dns_cf指定cloudflare方式,--debug 2可输出更详细信息,用于错误调试
~/.acme.sh/acme.sh --issue -d $DOMAIN -d *.$DOMAIN --listen-v6 --dns dns_cf #--debug 2
install_cert_path=/etc/letsencrypt/live/$DOMAIN
mkdir -p $install_cert_path
# 使用--install-cert安装证书到指定路径
~/.acme.sh/acme.sh --install-cert -d $DOMAIN \
--key-file $install_cert_path/privkey.pem \
--fullchain-file $install_cert_path/fullchain.pem

  安装完成后,会在crontab添加定时任务,每天检查证书是否过期。对应的,nginx需要在检查证书后执行reload,因此,需要手动添加crontab定时任务。
  对于安装在主机上的nginx,使用命令crontab -e打开crontab表,添加45 0 * * * /usr/bin/nginx -s reload;对于使用docker方式安装的nginx,则添加59 0 * * * /usr/bin/docker exec openresty nginx -s reload,注意exec后不能有-it。其中具体的执行时间,需要根据acme的执行时间后延10来分钟。

参考链接