已经使用letsencrypt的免费证书一段时间了,是之前折腾Ghost博客时自动安装的,而后台其实也是用的acme.sh这个工具。
遇到的问题是不知哪里的配置错误,我的证书自动更新有问题,每次都是遇到证书已经过期,网站彻底不能访问了,必须要手动更新。
之前用的HTTP的验证方式,由于一知半解,这块每次手动配置也会花费一些时间。
今天重读了官方文档,才发现有一些细节的使用,其实可以做到一劳永逸。
安装
curl https://get.acme.sh |sudo sh
# 默认安装在~/.acme.sh/
# 每天0点自动检测是否过期,并会通过cronjob自动更新证书
生成证书
支持两种验证方式。
注:记得带上www.mydomain.com这种形式的域名。
HTTP
我之前一直用这种,相比DNS方式还是麻烦些。
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/xulz/wwwroot/mydomain.com/
# 之前都不知道还可以指定nginx智能识别
acme.sh --issue -d mydomain.com --nginx
DNS
这个是真的自动化了。
# 以阿里云为例
# 下面的信息存在~/.acme.sh/account.conf,也可以手动修改
export Ali_Key="sdfsdfsdfljlbj"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
acme.sh --issue --dns dns_ali -d mydomain.com -d www.mydomain.com
安装证书
这步常被忽略。
注: 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件
# 注:Nginx 的配置 ssl_certificate 需要使用 /etc/nginx/ssl/fullchain.cer
acme.sh --installcert -d <domain>.com \
--key-file /etc/nginx/ssl/<domain>.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
其他
# 更新acme.sh
# V2版本已支持wildcard证书
acme.sh --upgrade
# 调试,打印更详细信息
acme.sh --issue ... --debug