Skip to content

使用 acme.sh 配置 SSL 证书

开源免费 | 支持自动续签 | 简洁高效

✅ 前提条件

  • 拥有域名(如 mzb123.org.cn
  • 阿里云账号
  • 已安装 NginxNginx UI(推荐使用 Docker 容器部署)

🔐 阿里云配置 RAM访问控制

  1. 登录 阿里云控制台
  2. 进入 RAM 控制台
  1. 创建一个子用户,并记录下生成的:
    • 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";
    }
}