关于

ACME是由 Let’s Encrypt 推出的自动化 SSL 证书管理协议。通过 ACME 协议,网站管理员可以轻松地自动申请、更新和管理 SSL 证书,完全告别手动操作的烦恼。

部署

git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m username@example.com

安装完成后,终端输入acme.sh -h便可以看到帮助命令。

修改CA证书类型

目前支持的CA证书分别是 Let’s EncryptBuypassZeroSSLSSL.comGoogle Public CA,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

#切换 Let’s Encrypt
acme.sh --set-default-ca --server letsencrypt
#切换 Google
acme.sh --set-default-ca --server google
以此类推!

因为笔者偏爱letsencrypt 执行上方命令即可。

配置DNS API

通过服务器提供的API。让acme.sh自动创建域名验证记录以申请域名证书。本文以阿里云为例。首先登陆阿里云控制台 - 访问控制 RAM - 身份管理-用户

完成后,分别复制AccessKey IDAccessKey Secret的值。保存并做好备份!

点击下方的添加权限。搜索DNS,选择AliyunDNSFullAccess点击确定!

配置 DNS API

在隐藏目录.acme.sh中添加配置

cd 
cd .acme.sh
vim account.conf

添加配置

export Ali_Key="LTAI4Fd8J9qs4fxxxxxxxxxx"
export Ali_Secret="Xp3Z7NDOW0CJcPLKoUwqxxxxxxxxxx"

申请证书

在申请证书之前,我们首先要确定原有ssl证书的位置。一般在你的nginx配置文件中。

一键申请命令

acme.sh --issue --dns dns_ali -d *.test.com --fullchain-file /home/ecs-user/test.pem --key-file /home/ecs-user/test.key

命令说明:

  • –dns dns_ali:表示阿里云 DNS 的插件

  • -d  *.test.com: 表示匹配所有 test.com 域名下的子域名

  • –fullchain-file:pem证书位置

  • –key-file:证书key位置

完成后,便会在指定的位置生成证书。

在宝塔面板中。默认的证书文件名为fullchain.pemprivkey.pem。因此我们可以按照上面文件名进行生成。或者,执行下面命令。重写nginx配置文件。

acme.sh --installcert -d example.com \
--key-file       /www/server/panel/vhost/cert/xxx.com/key.pem  \
--fullchain-file /www/server/panel/vhost/cert/xxx.com/cert.pem \
--reloadcmd     "service nginx force-reload"

自动部署

如果我们使用 curl https://get.acme.sh | sh 方式安装,续期任务会自动在定时任务中配置。使用acme.sh --cron便可以自动续期。

添加定时任务如下:

#设置每月执行一次的定时任务(每月第一天)
0 0 1 * * acme.sh --cron > /root/acme.sh/acme_cron.log 2>&1

在使用前,请先开启邮箱的pop3服务

安装mailx

yum install -y mailx
apt-get install -y mailx

设置/etc/mail.rc文件,在文件尾追加如下配置

set from=xxoo@qq.com(发送邮件的📮)
set smtp=smtp.qq.com
set smtp-auth-user=xxoo@qq.com(发送邮件的📮,同上)
set smtp-auth-password=ooxx(邮箱的smtp密码,注意不是邮箱登录的密码)
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

发送测试

echo "xxxxx" | mail -s "xxxxx  xxxx" xxxxx@qq.com

接下来,我们更新脚本。

#脚本
#!/bin/bash
cd ~
acme.sh --issue --dns dns_ali -d *.test.com --fullchain-file /home/ecs-user/test.pem --key-file /home/ecs-user/test.key
systemctl restart nginx
echo "站点HTTP证书更新完成" | mail -s "站点NB.COM已更新" xxxxx@qq.com
sleep 30 #30s后关闭脚本
exit 0

最后,添加定时任务即可!

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。