使用acme管理并自动续签证书

发表于:2024-08-23 09:56
技术,运维
热度:50
喜欢:0

由于现在各家厂商https证书开始缩紧,原来一年有效期的证书 现在都是3个月有效期了

故此,自动续签证书刻不容缓,找到已有解决方案是 acme.sh

安装过程

使用官方提供的命令

bash 复制代码
curl https://get.acme.sh | sh -s [email protected]

首先这个是外网地址,很慢,故可以挂一个代理

sh 复制代码
curl --proxy http://username:[email protected]:7888 -k https://get.acme.sh | sh -s [email protected]

虽然脚本下载下来了,但是只是下载了安装脚本
安装脚本里面会再下脚本,资源在github上,访问有问题

其实可能改安装脚本 再加代理,但是不能保证里面是不是还有外网地址

故就把curl设置全局代理

curl代理

在用户根目录下创建.curlrc 写入内容

language 复制代码
proxy = http://username:[email protected]:7888

再执行脚本就能快速安装了

检查计划任务

crontab -l
如果有添加计划任务执行的脚本是 acme.sh 则计划任务添加完成

设置别名

使用 echo $0 查看当前的终端,在更目录下找到终端.rc
如 ~/.bashrc
打开,并在末尾追加

复制代码
alias acme.sh='~/.acme.sh/acme.sh'

配置

  1. 先将默认的ca服务器改成letsencrypt
复制代码
acme.sh --set-default-ca --server letsencrypt
  1. 配置站点信息并签发
复制代码
acme.sh --issue -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ --nginx --server letsencrypt

--issue 是输出报错
-d 是domain的配置
--webroot 配置站点根目录,签发证书需要验证站点所有权
--nginx 指定服务器为nginx
--server 指定ca服务器

签发完成后会在 acme文件夹下看到对于域名的文件夹和证书

安装证书

复制代码
acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "nginx -s reload"
  1. 需要注意当前用户对nginx nginx日志目录,nginx.pid 文件 是否有读写权限
  2. 需要当前用户注意cert.pem 和key.pem
  3. 必要时nginx 使用 sudo nginx -s reload

设置钉钉通知

将钉钉的url和token暴露在环境变量中

在**.bashrc**中追加

sh 复制代码
export DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=b05ccexxxxx'
// 钉钉机器人关键字
export DINGTALK_KEYWORD=acme

配置完成 需要 source ~/.bashrc

配置文档

language 复制代码
--notify-level 0|1|2|3        设置通知级别:默认值是 2。

                 0: 禁用,不会发送任何通知。
                 1: 仅在出现错误时发送通知。没有消息就是好消息。
                 2: 当证书成功续期或出现错误时发送通知。
                 3: 当证书被跳过、续期或出现错误时发送通知。使用此级别,您将每晚收到通知。

--notify-mode 0|1               设置通知模式。默认值是 0。

                  0: 批量模式。将所有域名的通知合并在一条消息(邮件)中发送。
                  1: 证书模式。为每个单独的证书发送一条消息。在一晚上您可能会收到大量邮件。

--notify-hook [hookname]        设置通知钩子

--notify-source                   设置通知消息中的服务器名称

执行配置文件

language 复制代码
acme.sh  --set-notify  --notify-hook dingtalk

如果成功就是正常输出成功