Ubuntu 申请免费的SSL证书,并能3个月自动续期

Cloudflare,可以使用 acme.sh 的 dns_cf 模式轻松申请证书(无需开启 80/443 端口,也不需要备案)

一次配置,永久自动续期!

步骤 1:获取 Cloudflare API Key(或 Token)
推荐使用 API Token(权限更小更安全)
1、登录 Cloudflare 后台:https://dash.cloudflare.com/
2、点击右上角头像 → “My Profile”
3、选择左侧 “API Tokens” → 创建 Token
4、使用模板 “Edit zone DNS”
5、选择你要的域名(如 free-ai.top)
6、生成后保存你的 Token

步骤 2:安装 acme.sh(如未安装)

curl https://get.acme.sh | sh
source ~/.bashrc

步骤 3:设置 Cloudflare API 环境变量
如果你用的是 API Token:

export CF_Token="your_cloudflare_token"

复制生成后的 Token(不要关闭页面前忘记保存!)

export CF_Token="你刚刚复制的 token"
acme.sh --issue --dns dns_cf -d xxxx.free-ai.top

安装证书到 Nginx:

acme.sh --install-cert -d xxx.free-ai.top \
  --key-file       /docker-compose-app/nginx/certs/xxx.free-ai.top_ssl.key \
  --fullchain-file /docker-compose-app/nginx/certs/xxx.free-ai.top_ssl.crt \
  --reloadcmd     "docker restart nginx-ds"

以后 acme.sh 会自动续签证书(通常每 60 天签一次),并自动执行:(重启一下nginx)

docker restart nginx-ds

阿里云域名也是可以使用 acme SSL 证书的

需要配置阿里云 DNS API
1、登录阿里云 RAM 控制台
进入:https://ram.console.aliyun.com/

2、新建 RAM 用户
在左侧点击 用户管理 → 创建用户
用户登录名称:acme-dns
勾选:使用永久 AccessKey 访问
不需要控制台登录权限(只用于 API 调用)
点击 确认 创建

3、获取 AccessKey
创建完成后,你会看到:
AccessKey ID
AccessKey Secret
⚠️ 重要:Secret 只会显示一次,请立刻复制保存到一个安全的地方。

4、授予 DNS 管理权限
在 用户管理 页面找到刚才的用户 acme-dns
点击 添加权限 按钮
在权限策略列表搜索:
AliyunDNSFullAccess(意思是阿里云云解析的完整访问权限,适合 acme.sh 自动添加 TXT 记录)
勾选后点击 确定 授权

在 Ubuntu 上设置环境变量:

#返还根目录
cd ~
#使用国内节点获得acme.sh
git clone https://gitee.com/neilpang/acme.sh.git
#进入acme.sh进行安装
cd acme.sh
./acme.sh --install
source ~/.bashrc
# 改回 Let’s Encrypt(不需要 ZeroSSL 账号)
acme.sh --set-default-ca --server letsencrypt
# 需要配置一下阿里云的RAM 用户连接 API 信息
export Ali_Key="阿里API_KEY"
export Ali_Secret="阿里API_Secret"

# 申请域名证书
acme.sh --issue --dns dns_ali -d xxx.free-ai.top

#申请成功后证书会保存在:
~/.acme.sh/xxx.free-ai.top/

#假设你的 Web 服务是 Nginx:

acme.sh --install-cert -d xxx.free-ai.top \
  --key-file       /home/aliketen/docker-compose-app/nginx/certs/xxx.free-ai.top_ssl.key \
  --fullchain-file /home/aliketen/docker-compose-app/nginx/certs/xxx.free-ai.top_ssl.crt \
  --reloadcmd     "docker restart nginx-ds"

#注意了需要当前用户对目录有写权限,如果没有添加一下权限