使用acme.sh为阿里云DNS域名申请Let'sEncrypt通配符证书(Ubuntu+Nginx)

适用于:

  • 操作系统:Ubuntu
  • Web 服务器:Nginx
  • 域名:zhu2.netlyii.net
  • DNS 托管:阿里云云解析 DNS
  • 证书类型:Let’s Encrypt 通配符证书(Wildcard Certificate)
    千问生成,已测试

一、准备工作:获取阿里云 AccessKey

  1. 登录 阿里云 RAM 控制台
  2. 创建子用户(如 acme-user),启用 编程访问
  3. 授权策略:添加 AliyunDNSFullAccess(或自定义最小权限)
  4. 记录:
    • AccessKey ID
    • AccessKey Secret

⚠️ 安全建议:不要使用主账号 AK,仅授予 DNS 管理权限。


二、安装 acme.sh(从 Gitee 克隆)

1
2
3
4
5
6
7
8
9
10
# 安装依赖(确保 curl、git、socat 已安装)
sudo apt update
sudo apt install -y curl git socat

# 克隆 acme.sh 仓库(使用 Gitee 镜像,国内加速)
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh

# 安装 acme.sh 到 ~/.acme.sh/ 并设置自动升级
./acme.sh --install -m your-email@example.com

✅ 替换 your-email@example.com 为你的邮箱(用于证书过期通知)
安装后,acme.sh 命令将全局可用,实际脚本位于 ~/.acme.sh/acme.sh


三、配置阿里云 DNS API 凭据

1
2
3
# 设置环境变量(只需执行一次,acme.sh 会自动保存)
export Ali_Key="你的_AccessKey_ID"
export Ali_Secret="你的_AccessKey_Secret"

凭据将被保存在 ~/.acme.sh/account.conf 中,后续无需重复设置。


四、申请通配符证书

1
2
3
4
5
6
7
# 为 zhu2.net 申请证书(包含根域 + 通配符)
~/.acme.sh/acme.sh --issue --dns dns_ali \
-d zhu2.net -d '*.zhu2.net'

# 为 lyii.net 申请证书
~/.acme.sh/acme.sh --issue --dns dns_ali \
-d lyii.net -d '*.lyii.net'

✅ 成功后,证书临时存于 ~/.acme.sh/zhu2.net/~/.acme.sh/lyii.net/
但不要直接使用这些路径! 下一步将安装到标准目录。


五、将证书安装到 Nginx 目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建证书存储目录
sudo mkdir -p /etc/nginx/ssl/{zhu2.net,lyii.net}

# 安装 zhu2.net 证书
~/.acme.sh/acme.sh --install-cert -d zhu2.net -d '*.zhu2.net' \
--key-file /etc/nginx/ssl/zhu2.net/privkey.pem \
--fullchain-file /etc/nginx/ssl/zhu2.net/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx"

# 安装 lyii.net 证书
~/.acme.sh/acme.sh --install-cert -d lyii.net -d '*.lyii.net' \
--key-file /etc/nginx/ssl/lyii.net/privkey.pem \
--fullchain-file /etc/nginx/ssl/lyii.net/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx"

--reloadcmd 确保每次续期后自动重载 Nginx,无需手动干预。


六、配置 Nginx

1. 配置 zhu2.net

1
sudo nano /etc/nginx/sites-available/zhu2.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name zhu2.net *.zhu2.net;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name zhu2.net *.zhu2.net;

ssl_certificate /etc/nginx/ssl/zhu2.net/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/zhu2.net/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE+AESGCM:DHE+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

root /var/www/zhu2.net;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}

2. 配置 lyii.net

1
sudo nano /etc/nginx/sites-available/lyii.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name lyii.net *.lyii.net;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name lyii.net *.lyii.net;

ssl_certificate /etc/nginx/ssl/lyii.net/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/lyii.net/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE+AESGCM:DHE+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

root /var/www/lyii.net;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}

3. 启用站点并重载 Nginx

1
2
3
4
5
6
7
8
9
# 启用站点
sudo ln -s /etc/nginx/sites-available/zhu2.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/lyii.net /etc/nginx/sites-enabled/

# 测试配置
sudo nginx -t

# 重载服务
sudo systemctl reload nginx

七、自动续期(已自动配置)

acme.sh 在安装时已自动添加 cron 任务,每天检查证书是否需要续期。

验证 cron 是否存在:

1
crontab -l | grep acme.sh

应看到类似输出:

1
43 0 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" > /dev/null

✅ 续期成功后,会自动执行 --reloadcmd 重载 Nginx。

你也可以手动测试续期(不会真正续,仅模拟):

1
~/.acme.sh/acme.sh --cron --force

八、验证 HTTPS

  • 访问 https://test.zhu2.net
  • 访问 https://api.lyii.net
  • 浏览器应显示安全锁,无证书错误
  • 可使用 SSL Labs 测试 检查配置安全性

附录:安全建议

  1. 限制 AccessKey 权限:仅允许操作 DNS 记录(AddDomainRecord, DeleteDomainRecord, DescribeDomainRecords
  2. 保护凭据文件~/.acme.sh/account.conf 包含敏感信息,请勿泄露
  3. 定期更新 acme.sh:支持自动升级,也可手动运行 ~/.acme.sh/acme.sh --upgrade

📌 本文档基于 acme.sh 从 Gitee 安装,适用于中国大陆网络环境。
如需支持其他 DNS 服务商(如腾讯云、华为云、DNSPod),acme.sh 也提供对应插件。


完成!你的网站现在已启用免费、自动续期的 Let’s Encrypt 通配符 HTTPS 证书。