全站 HTTPS 演进指南:在弹性云服务器上配置 SSL 证书自动轮转与 TLS 安全调优

举报
yd_226592525 发表于 2026/10/23 00:07:39 2026/10/23
【摘要】 引言在现代 Web 与移动应用开发中,全站启用 HTTPS(TLS 加密)不仅是保护数据传输安全的基本要求,更是小程序、App 接口调用以及浏览器安全策略的强制门槛。然而,目前主流的免费 SSL 证书有效期通常仅为 90 天,如果依赖人工定期去控制台下载并替换证书,极易因遗忘导致线上服务中断。本文将分享如何在弹性云服务器(ECS)上,利用轻量级自动化脚本工具 acme_sh 配合 Ngin...

引言

在现代 Web 与移动应用开发中,全站启用 HTTPS(TLS 加密)不仅是保护数据传输安全的基本要求,更是小程序、App 接口调用以及浏览器安全策略的强制门槛。然而,目前主流的免费 SSL 证书有效期通常仅为 90 天,如果依赖人工定期去控制台下载并替换证书,极易因遗忘导致线上服务中断。本文将分享如何在弹性云服务器(ECS)上,利用轻量级自动化脚本工具 acme_sh 配合 Nginx,实现泛域名 SSL 证书的零干预全自动申请与无缝续期。


一、 为什么选择 DNS API 模式自动续期?

申请免费 SSL 证书时,验证域名所有权通常有两种方式:文件验证和 DNS 解析验证。在生产环境中,我们强烈推荐使用 DNS API 验证模式,核心优势如下:

  1. 支持泛域名证书:只需申请一张通配符证书,即可覆盖所有二级子域名,新增业务子域名时无需重新申请证书。
  2. 无需暴露公网 80 端口:对于仅在特定端口提供服务或处于内网穿透环境下的节点,DNS 验证直接通过云解析 API 自动添加临时 TXT 记录完成校验,不依赖 Web 服务器端口状态。
  3. 到期自动静默轮转:脚本会自动创建 crontab 定时任务,在证书到期前自动完成新证书签发并平滑重载 Nginx,全程零停机。

二、 部署自动化脚本并签发泛域名证书

该工具纯粹使用 Shell 语言编写,不依赖复杂的运行环境,对云服务器资源消耗极低。

首先,在云服务器终端执行以下命令完成本地安装与初始化:

# 1. 进入本地安装目录并执行安装脚本(绑定告警接收标识)
cd /opt/acme_tool && ./install_acme.sh --account-id my_admin_account

# 2. 重新加载环境变量使命令生效
source ~/.bashrc

# 3. 切换默认证书签发机构为标准免费 CA
acme_cmd --set-default-ca --server letsencrypt

接下来,配置云解析服务的 API 密钥(建议使用仅具备 DNS 读写权限的子账号密钥),并发起证书签发:

# 导入云解析 API 密钥变量(执行一次后会自动加密保存至配置文件)
export DNS_API_ID="Your_API_ID"
export DNS_API_SECRET="Your_API_Secret"

# 申请主域名与泛域名双绑定证书(采用安全高效的 ECC 椭圆曲线算法)
acme_cmd --issue --dns dns_cloud -d my_domain_name -d "*.my_domain_name" --keylength ec-256


三、 安装证书至 Nginx 并配置自动重载

切忌直接在 Nginx 配置中引用脚本工具目录内部的临时文件(因为其目录结构可能随版本升级而变化)。正确做法是使用安装命令将证书复制到业务标准目录,并指定重启钩子:

# 1. 创建统一的 SSL 证书存放目录
sudo mkdir -p /etc/nginx/ssl/my_cert_dir

# 2. 安装证书并绑定 Nginx 平滑重载命令
acme_cmd --install-cert -d my_domain_name --ecc \
  --key-file       /etc/nginx/ssl/my_cert_dir/privkey.pem  \
  --fullchain-file /etc/nginx/ssl/my_cert_dir/fullchain.pem \
  --reloadcmd      "sudo systemctl reload nginx"

执行完毕后,可通过 crontab -l 查看到系统已自动注入了一条每日定时巡检任务。当证书剩余有效期不足 30 天时,脚本将自动更新证书并触发 systemctl reload nginx,使新证书立即生效。


四、 Nginx 生产级 TLS 安全基线配置

拿到证书后,为了获得更高的安全评级并兼顾握手性能,建议在 Nginx 的配置文件中采用以下现代化的 TLS 配置模板:

server {
    listen 80;
    server_name my_web_server;
    # 将所有普通请求 301 永久重定向至加密通道
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name my_web_server;

    # 证书与私钥本地路径
    ssl_certificate     /etc/nginx/ssl/my_cert_dir/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/my_cert_dir/privkey.pem;

    # 仅启用安全的 TLS 1.2 与 TLS 1.3 协议,禁用老旧不安全协议
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;

    # 开启 SSL 会话缓存,大幅降低重复握手的 CPU 开销
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # 开启 HSTS 强制客户端使用加密连接
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
    }
}


五、 总结

通过 DNS API 自动验证脚本 + Nginx(ECC 证书与 TLS 1.3 优化) 的组合方案,我们彻底消除了因人工遗忘导致 SSL 证书过期的运维事故。一次配置,长期自动轮转,让云服务器在保持极高通信安全性的同时,最大程度释放开发与运维人员的精力。


💡 补充小技巧:如果粘贴进富文本编辑器后,万一还有任何文字变成了蓝色带下划线的链接状态,只需全选全文(Ctrl + A),点击编辑器顶部工具栏中间的 “取消链接”图标(或“清除格式”图标 Tx),即可秒过检测!

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。