acme.sh 快速指南

2025-01-09 21:11:00
丁国栋
原创 25
摘要:本文记录使用acme.sh安装、申请、续订SSL证书用于HTTPS Web等。

acme.sh 是一个用于自动化获取和管理 SSL/TLS 证书的命令行工具,它实现了 ACME 协议(自动证书管理环境),主要用于与 Let's Encrypt、ZeroSSL 等提供免费SSL证书的服务进行交互。ACME协议旨在简化证书的申请、验证、签发以及续订过程,使得网站管理员可以更轻松地为其网站部署HTTPS。
使用 acme.sh,可以做到:

  1. 自动完成域名所有权验证。
  2. 获取证书并将其安装到你的服务器上。
  3. 设置定时任务自动更新证书,因为Let's Encrypt等服务签发的证书有效期通常较短(例如90天)。
acme.sh 支持多种验证方式来证明域名的所有权,比如通过在DNS记录中添加TXT记录,或是在网站根目录下放置特定文件,还可以使用 API 自动添加和删除DNS解析记录。这使得它不仅适用于简单的Web服务器配置,也支持更为复杂的场景。此外,它还提供了灵活的插件机制,允许用户根据需要扩展其功能。


安装acme.sh

1. 使用官方脚本安装 acme.sh 

curl -k https://get.acme.sh | sh -s email=ssl@thedf.cc

注意:默认会安装到当前用户的家目录,除非 sh 命令前有sudo加持则会安装到 root 家目录。


2. 使用源码进行安装

yum install -y socat || apt install -y socat
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install


提示:安装后,并不会将 ~/.acme.sh 目录添加到 PATH 变量中,因此使用 acme.sh 命令需要完整的可执行文件路径或者设置 PATH 变量。当然还有更高效的办法,执行 source ~/.acme.sh/acme.sh.env也能实现一样的效果,后续可添加到 .bashrc 或者 .zshrc 。


安装证书后会在系统计划任务中添加一条计划任务 29 12 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null 用于定期更新证书。不必担心更新过于频繁,程序会自己判断是否该更新。


设置申请证书的邮箱,邮箱地址可以收到证书过期通知

acme.sh --register-account -m "ssl@thedf.cc"


申请证书

申请证书有多种办法,这里介绍两种最常用的、可以脚本化执行的方式。

在申请证书时可以设置使用哪一个CA来签发证书,比如可以选择letsencrypt还是zerossl等。

acme.sh --set-default-ca --server letsencrypt


1. 申请单域名证书

申请单域名证书可以使用 webroot 验证方式验证域名所有权。

~/.acme.sh/acme.sh --issue -d demo.thedf.cc -w /var/www/html/ --log

注意:使用 webroot认证时,必须确保该域名的 HTTP 80 端口可以正常访问,否则无法验证成功。

2. 申请泛域名证书

申请 泛域名证书 必须有域名服务商的access key,比如阿里云、腾讯云、AWS 的 access key。

以腾讯云为例:

export Tencent_SecretId="AKIDxxxxx"
export Tencent_SecretKey="xxxxxxx"
/root/.acme.sh/acme.sh --issue -d 'thedf.cc' -d '*.thedf.cc' --dns dns_tencent


以阿里云为例:

export Ali_Key="LTAIExxx"
export Ali_Secret="xxxxxxxx"
acme.sh --issue -d 'thedf.cc'  -d '*.thedf.cc' --dns dns_ali
提示:阿里云账户RAM子账号需要授予“域名管理权限”和“管理云解析(DNS)的权限”


注意:如果签发证书不成功,重复执行次数最好不要超过5次以免被 CA 惩罚到第二天再试,尽可能找到不成功的问题。例如由于文件系统权限问题可能导致无法创建 CA 所需的验证目录和文件;由于 AK权限问题无法验证域名所有权等。

查看已申请证书

acme.sh --list


执行示例:

$ acme.sh --list
Main_Domain  KeyLength  SAN_Domains  CA           Created               Renew
thedf.cc     "ec-256"   *.thedf.cc   ZeroSSL.com  2024-11-18T04:30:49Z  2025-01-16T04:30:49Z


续订所有证书

acme.sh --renew-all

强制签发证书

/root/.acme.sh/acme.sh --renew -d thedf.cc --force


可以使用 acme.sh 将申请的证书安装到其他位置,并且执行其他命令用来重启web服务器等。

./acme.sh --install-cert -d demo.thedf.cc --key-file /etc/nginx/ssl/demo.thedf.cc.key --fullchain-file /etc/nginx/ssl/demo.thedf.cc.pem --reloadcmd "/usr/sbin/nginx -s reload"

提示:这种方式是为了解决web服务器等无权限访问证书的问题。理论上使用链接也可以。


注意证书使用 fullchain.cer,这样的证书包含了CA证书和中间证书,可以大幅度提升证书的可信任度和兼容性。


官方文档

  1. 中文说明
  2. 其他人写的技术博客或者科普文章



--

发表评论
博客分类