网站 HTTPS 证书管理与自动化续期完全指南

网站 HTTPS 证书管理与自动化续期完全指南

前言

在 2026 年的今天,HTTPS 已经不再是一个可选项,而是每个个人网站的必备配置。Chrome 浏览器早已将所有 HTTP 页面标记为"不安全",搜索引擎也更倾向于索引 HTTPS 站点。对于个人站长来说,最大的痛点并不是配置 HTTPS 本身,而是如何管理证书的续期——Let's Encrypt 证书有效期只有 90 天,手工续期不仅麻烦,还容易遗漏导致网站宕机。本文将手把手教你搭建一套完整的 HTTPS 证书自动化管理体系。

理解 SSL/TLS 证书基础

在开始配置之前,先简单了解几个核心概念:

  • SSL/TLS 证书:用于在客户端和服务器之间建立加密通信的数字证书
  • CA(证书颁发机构):颁发证书的可信第三方。Let's Encrypt 是目前最流行的免费 CA
  • ACME 协议:自动化证书管理协议,Let's Encrypt 使用该协议实现证书的自动申请和续期
  • 证书链:从服务器证书到根证书的完整信任链

个人站长最常用的是单域名证书和泛域名证书。如果你的网站只有一个域名,用单域名证书即可。如果有多个子域名,泛域名证书会更方便。

使用 acme.sh 实现自动化证书管理

acme.sh 是目前最流行的 ACME 客户端之一,用纯 Shell 脚本编写,不依赖任何第三方库,非常适合在 Linux 服务器上使用。

安装 acme.sh

# 使用官方安装脚本
curl https://get.acme.sh | sh -s email=your@email.com

# 或者使用 Git 方式
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m your@email.com

安装完成后,acme.sh 会自动添加到 crontab 中,默认每天检查一次证书是否需要续期。我们需要做的就是申请证书和配置 Web 服务器。

DNS API 模式申请证书

推荐使用 DNS API 模式,因为它不需要在服务器上暴露 80 端口,也支持泛域名证书。以 Cloudflare 为例:

# 设置 Cloudflare API Token
export CF_Token="你的 API Token"

# 申请泛域名证书
~/.acme.sh/acme.sh --issue --dns dns_cf -d 'example.com' -d '*.example.com'

acme.sh 支持数十种 DNS 服务商,包括阿里云、腾讯云、DNSPod 等。对于国内站长,常见的配置:

# 阿里云 DNS
export Ali_Key="你的 AccessKey"
export Ali_Secret="你的 AccessSecret"
~/.acme.sh/acme.sh --issue --dns dns_ali -d example.com -d '*.example.com'

# DNSPod(腾讯云)
export DP_Id="你的 DNSPod ID"
export DP_Key="你的 DNSPod Key"
~/.acme.sh/acme.sh --issue --dns dns_dp -d example.com -d '*.example.com'

安装证书到 Nginx

申请到证书后,将证书安装到 Nginx:

~/.acme.sh/acme.sh --install-cert -d example.com \
  --key-file /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/example.com.crt \
  --reloadcmd "systemctl reload nginx"

--reloadcmd 参数会在证书续期成功后自动执行,确保证书更新后 Nginx 立即加载新证书。

对应的 Nginx 配置:

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # 更安全的 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其他配置...
}

Nginx HTTPS 安全加固

光有证书还不够,还需要配置安全的 TLS 参数,避免安全漏洞:

禁用不安全的协议和密码套件

# 只允许 TLS 1.2 和 1.3
ssl_protocols TLSv1.2 TLSv1.3;

# 只使用强密码套件
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;

启用 HSTS(HTTP Strict Transport Security)

HSTS 告诉浏览器:在指定时间内,只能通过 HTTPS 访问该网站:

# 在 server 块中添加
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

配置 OCSP Stapling

OCSP Stapling 可以提升 HTTPS 握手速度,同时减少隐私泄露:

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;

HTTP 自动跳转 HTTPS

配置所有 HTTP 流量自动跳转到 HTTPS:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

监控证书过期状态

即使有自动化续期,也建议设置监控,防止意外情况:

# 手动检查证书过期时间
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates

# 使用 acme.sh 列出所有证书状态
~/.acme.sh/acme.sh --list

也可以设置一个简单的监控脚本:

#!/bin/bash
DOMAIN="example.com"
EXPIRY=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
EXPIRY_TS=$(date -d "$EXPIRY" +%s)
NOW_TS=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_TS - NOW_TS) / 86400 ))

if [ $DAYS_LEFT -lt 7 ]; then
    echo "警告:证书将在 $DAYS_LEFT 天后过期!"
    # 可以在这里添加发送通知的命令
fi

常见问题排查

证书申请失败

  • 检查域名 DNS 解析是否正确
  • 确认 DNS API Token 权限是否足够
  • 查看日志:~/.acme.sh/acme.sh --issue --dns dns_cf -d example.com --debug

证书续期失效

  • 确认 crontab 是否正常运行:crontab -l | grep acme
  • 手动测试续期:~/.acme.sh/acme.sh --renew -d example.com --force
  • 查看 acme.sh 日志文件

浏览器提示证书错误

  • 确认系统时间是否准确:date
  • 检查证书链是否完整:openssl s_client -connect example.com:443 -showcerts
  • 确认 Nginx 配置中的路径是否正确

总结

HTTPS 证书自动化管理是每个个人站长必须掌握的基础技能。通过 acme.sh + crontab + Nginx 的组合,可以搭建一套完全自动化的证书管理体系,无需人工干预就能保证证书长期有效。配合 HSTS、OCSP Stapling 等安全配置,不仅提升了网站的安全性,还能获得搜索引擎的青睐。记住:自动化续期的关键是一开始就配置好 --reloadcmd 参数,否则证书续了但服务器没重载,等于白忙活。

Last modification:July 26th, 2026 at 09:49 am

Leave a Comment