跨境独立站多站点统一SSL证书批量配置
如果你同时运营多个跨境独立站,每到证书续期时挨个手动操作会非常低效。
本文提供一套可批量配置统一SSL证书的方案,基于acme.sh工具配合DNS API实现多域名自动申请和续期,零基础也能按步骤完成。
适用场景与前提条件
这套方案适合下列情况:
- 你有多个独立站域名,全部指向同一台或同一组服务器。
- 希望一次性完成所有站点的证书申请,并自动续期。
- 你拥有域名DNS管理权限,并支持API操作(例如阿里云、腾讯云、Cloudflare等)。
操作前请确认:
- 服务器已安装Ubuntu 20.04+或CentOS 7+,并具备sudo权限。
- Nginx或Apache已经配置好各站点的虚拟主机。
- 域名解析已生效。
第一步:安装acme.sh
acme.sh是一个纯Shell脚本的SSL证书自动管理工具,支持数十种DNS API。
curl https://get.acme.sh | sh -s email=youremail@example.com
安装完成后重新加载Shell配置:
source ~/.bashrc
验证安装:
acme.sh --version
第二步:配置DNS API凭证
以阿里云DNS为例,登录阿里云控制台获取AccessKey和SecretKey,然后设置环境变量:
export Ali_Key="你的AccessKey"
export Ali_Secret="你的SecretKey"
如果是Cloudflare,对应变量为CF_Token和CF_Account_ID。
具体变量名请查阅acme.sh官方dnsapi文档。
注意:建议将变量写入~/.bashrc或~/.acme.sh/account.conf,防止每次重开终端丢失。
第三步:批量申请SSL证书
假设你有三个站点:example1.com、example2.com、example3.com,可以使用--issue加-d参数一次为多个域名申请。
其中第一个域名会被当作主域名,生成的证书文件夹以此命名。
acme.sh --issue --dns dns_ali -d example1.com -d www.example1.com -d example2.com -d www.example2.com -d example3.com -d www.example3.com
若你使用泛域名证书,只需每个主域名一个通配符:
acme.sh --issue --dns dns_ali -d *.example1.com -d *.example2.com -d *.example3.com
证书申请成功后,会在~/.acme.sh/下生成对应文件夹。
第四步:部署证书到Web服务器
以Nginx为例,将证书文件复制到站点目录,并修改每个站点的配置。
可以写一个循环脚本批量操作,这里演示手动步骤:
# 获取证书路径
acme.sh --install-cert -d example1.com \
--key-file /etc/nginx/ssl/example1.com.key \
--fullchain-file /etc/nginx/ssl/example1.com.pem \
--reloadcmd "service nginx force-reload"
其他域名重复执行,替换域名。
若你希望更自动化,可以把全部域名写入一个数组,循环处理。
Nginx站点配置示意(/etc/nginx/sites-available/example1.com.conf):
server {
listen 443 ssl;
server_name example1.com www.example1.com;
ssl_certificate /etc/nginx/ssl/example1.com.pem;
ssl_certificate_key /etc/nginx/ssl/example1.com.key;
# 其他配置...
}
修改后重载Nginx:
nginx -t && systemctl reload nginx
避坑指南
- 速率限制:Let's Encrypt每周每域名限制50个证书。一次性申请太多域名可能触发软限制,建议单个证书包含不超过10个域名。
- DNS API权限:确保密钥只具有DNS修改权限,不要使用主账号密钥。
- 泛域名证书注意事项:泛域名不支持裸域名,需额外为
example.com单独添加一条记录。 - 续期测试:acme.sh默认每天自动检测续期,但建议首次手动测试一次:
acme.sh --renew -d example1.com --force
确认无报错。
效果验证
- 在浏览器中访问每个站点的
https://yourdomain.com,查看地址栏小锁标志。 - 使用OpenSSL命令检查证书信息:
echo | openssl s_client -connect example1.com:443 -servername example1.com 2>/dev/null | openssl x509 -noout -subject -dates
输出应包含所有域名和正确的有效期。
- 查看证书链完整性:访问
https://www.ssllabs.com/ssltest/输入域名进行在线检测,评分A以上为佳。
常见问题FAQ
Q:使用其他DNS服务商(如Godaddy、Namecheap)能支持吗?
A:acme.sh支持超过100种DNS API,大部分主流服务商都已涵盖。使用前只需设置对应的环境变量,具体参数可参考acme.sh官方wiki。
Q:证书快过期时acme.sh会自动续期吗?
A:会。acme.sh安装后会自动添加crontab任务,每天检测证书剩余天数,到期前30天内自动续期。你只需确保DNS API凭证在续期时仍然有效。
Q:服务器有多个IP或使用CDN怎么办?
A:本方案仅依赖DNS验证,与服务器IP无关,因此即使站点分布在多台服务器或使用CDN,依然可以统一申请证书。但证书生成后,你需要将证书部署到每台实际提供服务的机器上。
如果你正在处理跨境独立站多站点SSL证书批量配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
掌握自动批量配置后,你每月维护证书的时间可以缩短到几分钟。