跳到主要内容

使用 acme.sh 自动续签阿里云 SSL 证书

个人免费证书只能用90天,所以每90天需要更换一次,要么手动,要么自动:

1. 在服务器上安装 acme.sh

curl https://get.acme.sh | sh -s email=my@example.com
  • acme.sh会自动安装在登录用户的根目录~下,比如/root/.acme.sh
  • 安装时,会自动在.bashrc中添加alias,这样就可以在全局任何地方使用 acme.sh命令;
  • 安装后,会自动创建 cronjob, 每天 0:00 点自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书。

注意:如果安装完成后提示 -bash: acme.sh: command not found,需要手动执行 source ~/.bashrc

如果通过以上方式安装不成功,且服务器架在国内,就用下面这种方式

git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

如果没有安装 git, 需要先使用 yum 安装git:

sudo yum update
sudo yum install git

2. DNS 验证方式生成证书

image.png

image.png

  • 编辑~/.acme.sh/account.conf文件,新增Ali_KeyAli_Secret的值
SAVED_Ali_Key='<Ali_Key>'
SAVED_Ali_Secret='<Ali_Secret>'
  • 生成证书,其中 leyla.top 为要生成证书的域名,*.leyla.top为其所有的二级域名,生成大概需要 1 分钟时间:
acme.sh --issue --dns dns_ali -d leyla.top -d *.leyla.top

注意:如果生成证书过程中报错了,请检查account.conf 文件中 Ali_KeyAli_Secret的值是否与在RAM中设置的一致、检查RAM中为该用户设置的权限是否正确;

3.安装证书

  • 默认生成的证书都放在 ~/.acme.sh/<DOMAIN>/ 目录下(如 leyla.top目录),使用 –install-cert 命令,证书将会复制到相应的位置,并重启Web服务。
acme.sh --install-cert -d leyla.top --key-file /etc/nginx/ssl/leyla.top.key --fullchain-file /etc/nginx/ssl/leyla.top.pem --reloadcmd "systemctl reload nginx.service"
  • /etc/nginx/ssl/ 为该服务器之前存储证书的目录
  • systemctl reload nginx.service 为重启nginx服务的命令

4. 检查是否生效

访问网站,检查证书的创建时间和过期时间。创建时间为生成证书的时间、过期时间为90天后。

Issued On Monday, February 10, 2025 at 8:00:00AM
Expires On Monday, May 12, 2025 at 7:59:59AM

⚠️ 注意:如果是在证书过期后,重新生成新的证书。刷新网站后,可能展示如下报错。这个问题很常见,特别是在证书更新后。Chrome的安全策略比较严格,会记住网站的历史安全状态。按照下述步骤清除缓存后,问题应该就解决了:

  1. 清除Chrome的安全状态缓存
方法一:
1. 在Chrome地址栏输入:chrome://settings/content/all
2. 搜索 "leyla.top"
3. 删除所有相关的站点数据和权限

方法二:
1. 点击地址栏左侧的锁图标或"不安全"标识
2. 选择"站点设置"
3. 点击"重置权限"
4. 点击"清除数据"

  1. 强制刷新SSL状态
# 在Chrome地址栏输入并访问
chrome://net-internals/#hsts

# 在 "Delete domain security policies" 部分
# 输入: leyla.top
# 点击 "Delete"

  1. 重启浏览器并重新访问 image.png

参考地址: acme.sh/wiki/说明 ## Use Aliyun domain API to automatically issue cert