使用 acme.sh 配置 SSL 证书
开源免费 | 支持自动续签 | 简洁高效
✅ 前提条件
- 拥有域名(如
mzb123.org.cn) - 阿里云账号
- 已安装
Nginx或Nginx UI(推荐使用Docker容器部署)
🔐 阿里云配置 RAM访问控制
- 登录 阿里云控制台
- 进入 RAM 控制台

- 创建一个子用户,并记录下生成的:
- AccessKey ID (Ali_Key)
- AccessKey Secret (Ali_Secret)

添加权限策略
为该子用户添加如下 DNS 相关权限:

搜索 DNS ,把搜索到的所有勾上

📦 安装 acme.sh
bash
cd /home
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m your_email@example.com⚠️ 替换
your_email@example.com为你自己的邮箱地址(虽然不是必须填写,但建议填写)
配置 阿里云的 key
bash
export Ali_Key="你的 Ali_Key"
export Ali_Secret="你的 Ali_Secret"💡 生成通配符证书(这一步可能比较久,如果失败,重新执行下),这里我的网站是 mzb123.org.cn
bash
./acme.sh --issue --dns dns_ali -d mzb123.org.cn -d *.mzb123.org.cn💡 如果仍然失败,请前往阿里云 DNS 解析页面删除所有解析记录后再尝试。
成功后返回证书路径

📁 复制证书到 Nginx 路径
这里以 nginx-ui 为例,将证书复制到 /home/nginx/certs
bash
cp /root/.acme.sh/mzb123.org.cn/fullchain.cer /home/nginx/certs/_.mzb123.org.cn.pem
cp /root/.acme.sh/mzb123.org.cn/mzb123.org.cn.key /home/nginx/certs/_.mzb123.org.cn.key💡 重新加载下nginx配置
bash
docker exec nginx-ui nginx -s reload🔄 设置自动续签
bash
./acme.sh --install-cert -d mzb123.org.cn \
--key-file /home/nginx/certs/_.mzb123.org.cn.key \
--fullchain-file /home/nginx/certs/_.mzb123.org.cn.pem \
--reloadcmd "docker exec nginx-ui nginx -s reload"📄 Nginx 配置示例
nginx
server {
listen 80;
server_name home.mzb123.org.cn;
# 强制重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name home.mzb123.org.cn;
ssl_certificate /etc/nginx/certs/_.mzb123.org.cn.pem;
ssl_certificate_key /etc/nginx/certs/_.mzb123.org.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass http://homepage:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}