安装acme.sh
acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
- 安装acme.sh
curl https://get.acme.sh | sh
- 创建 一个 bash 的 alias, 方便你的使用
alias acme.sh=~/.acme.sh/acme.sh
安装完成可以通过查看版本来验证是否安装成功
# 查询版本号
acme.sh --version
acme.sh会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/
生成证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns
验证,这里使用dns来验证,http的使用请查看官网。
dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.
阿里云为例,其它平台参考实现,修改生成证书–dns即可
- 将Ali_Key和Ali_Secret添加到环境变量,这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用命令生成证书的时候, 就不需要再次指定了. 直接生成就好了
export Ali_Key="********"
export Ali_Secret="********"
- 注册账号
acme.sh --register-account -m my@example.com
- 执行证书生成命令
# 生成证书,*.it996.vip为网站
acme.sh --issue --dns dns_ali -d *.it996.vip
接下来你将看到一个倒计时,证书生成成功后会员SUCCESS提示
安装证书,nginx为例
# nginx -s reload service nginx force-reload 提前运行一下,看哪个可用
# --key-file key的存放路径,自定义即可,文件名称可以自定义,最后的后缀记得和生成的一样即可
# --fullchain-file 证书存放路径,自定义即可,文件名称可以自定义,最后的后缀记得和生成的一样即可
# --reloadcmd 证书更新后执行的命令,(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
acme.sh --install-cert -d *.it996.vip \
--key-file /data/https/*.it996.vip.key.pem \
--fullchain-file /data/https/*.it996.vip.cert.pem \
#--reloadcmd "service nginx force-reload"
--reloadcmd "nginx -s reload"
- nginx配置
server {
listen 443 ssl;
server_name *.it996.vip;
# 证书配置,路径和上面一样即可
ssl_certificate /data/https/*.it996.vip.cert.pem;
ssl_certificate_key /data/https/*.it996.vip.key.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
}
}
更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
常用命令
# 安装acme
curl https://get.acme.sh | sh
# 查看acme版本
acme.sh --version
# 添加环境变量
export Ali_Key="**********"
export Ali_Secret="**********"
# 申请证书
acme.sh --issue --dns dns_ali -d *.it996.vip
# 更新证书
acme.sh --renew -d '*.it996.vip' --force
# 查看证书列表
acme.sh --list
# 删除证书
acme.sh remove *.it996.vip
# 升级 acme.sh 到最新版:
acme.sh --upgrade
# 开启自动升级:
acme.sh --upgrade --auto-upgrade
# 关闭自动更新:
acme.sh --upgrade --auto-upgrade 0