1. 项目目标
(1)使用acme.sh实现自动创建、更新、安装https证书
2. 项目准备
2.1. 基础准备
系统镜像:CentOS 8.2
安装包下载网址:https://get.acme.sh
3. 项目实施
3.1. 引言
acme.sh
是一个用于自动化处理Let's Encrypt证书的工具,它支持多种验证方式,可以自动创建、安装和更新证书。
3.2. 安装acme.sh
通过以下命令安装acme.sh
:
curl https://get.acme.sh | sh
安装后,创建一个别名以方便使用:
alias acme.sh=~/.acme.sh/acme.sh
3.3. 生成证书
生成证书前需要验证域名所有权。acme.sh
支持多种验证方式:
3.4. Webroot模式
适用于已运行Web服务器的情况。指定网站根目录后,acme.sh
会自动生成并放置验证文件,完成验证后删除这些文件:
acme.sh --issue -d example.com -w /home/wwwroot/example.com
3.5. Standalone模式
如果没有Web服务器且80端口可用,可以使用独立模式。acme.sh
会监听80端口进行验证:
acme.sh --issue -d example.com --standalone
3.6. DNS方式
手动模式
需要手动在域名解析后台添加TXT记录,然后再次刷新证书:
acme.sh --issue --dns -d example.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
这种方式不支持自动更新证书。
自动模式
acme.sh
支持一些域名解析商的API(这里以阿里云为例),可以自动添加记录完成验证并更新证书。以阿里云为例,首先获取API密钥:
export Ali_Key="your_access_key"
export Ali_Secret="your_secret_key"
然后使用以下命令自动验证颁发证书:
acme.sh --issue --dns dns_ali -d example.com --nginx
3.7. Nginx模式
如果使用Nginx服务器,acme.sh
可以从Nginx配置中自动完成验证:
acme.sh --issue -d example.com --nginx
安装证书
生成的证书默认存放在acme.sh
的安装目录下。使用以下命令安装证书到指定位置,并重新加载服务:
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/cert.key \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload。
3.8. 更新证书
Let's Encrypt证书有效期为60天,需要定期更新:
手动更新
使用以下命令手动更新证书:
acme.sh --renew -d example.com --force
自动更新
acme.sh
安装时会自动创建一个cronjob,每天检查证书是否需要更新。可以通过以下命令查看crontab任务:
crontab -l
3.9. 更新acme.sh
为了与Let's Encrypt CA保持同步,需要定期更新acme.sh
:
acme.sh --upgrade
设置自动升级:
acme.sh --upgrade --auto-upgrade
4. 项目总结
acme.sh
提供了一个简单、高效的方法来管理Let's Encrypt证书,支持多种验证方式和自动续期功能,极大地简化了HTTPS证书的部署和管理。