TLS 配置生成

Nginx SSL 配置生成器

生成带 TLS 1.2/1.3、HSTS 和 HTTPS 跳转的 Nginx server 配置,并按你的 Nginx 和 OpenSSL 版本给出注意事项。

浏览器本地运行 你输入的内容只在本地用 JavaScript 处理,不会上传到 ssl.sh。

档位

证书路径

最后核实

TLS 配置生成器的 Nginx 预设生成加固过的 Nginx HTTPS 配置。选好档位和选项,把生成的 server 块复制到站点配置里,用 nginx -t 测试后重载。

示例:中级档

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

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/privkey.pem;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;

    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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
    ssl_prefer_server_ciphers off;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

    root /var/www/example.com;
}

国内环境说明

  • 宝塔面板:在“网站 → 设置 → SSL”里粘贴“密钥(KEY)”和“证书(PEM格式)”后,面板会把证书写到 /www/server/panel/vhost/cert/<网站名>/ 下的 fullchain.pem 和 privkey.pem,并在配置文件里生成 ssl 相关指令。要改协议和套件,在“配置文件”里修改 ssl_protocols、ssl_ciphers 这几行。
  • 阿里云、腾讯云下载的 Nginx 证书包:里面的 .pem/_bundle.crt 已经是证书链,直接给 ssl_certificate;.key 给 ssl_certificate_key。

版本要求

  • TLS 1.3:Nginx 1.13.0+,并且链接 OpenSSL 1.1.1+,用 nginx -V 确认。
  • http2 on;:Nginx 1.25.1+。更老的版本删掉这一行,改为 listen 443 ssl http2;。
  • 后量子:ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1:secp384r1; 需要 OpenSSL 3.5+,版本不够时 Nginx 无法启动,确认后再勾选。

测试并重载

sudo nginx -t && sudo systemctl reload nginx
curl -sI https://example.com | grep -i strict-transport

然后用 SSL 检查确认协议和证书链。

常见错误

  • ssl_certificate 只放了站点证书:浏览器也许没事,但 curl、Java、小程序后端调用会失败。用 fullchain.pem(见证书链补全)。
  • 在 location 里写了 add_header:会覆盖从 server 块继承来的所有 add_header,HSTS 在这个 location 里悄悄消失了。在那个 location 里把 HSTS 再写一遍。
  • 私钥和证书不匹配:Nginx 报 “key values mismatch”,用私钥匹配工具检查。

常见问题

配置放在哪里?

放在站点的 server 块里,一般是 /etc/nginx/conf.d/example.com.conf,或 /etc/nginx/sites-available/example.com(链接到 sites-enabled)。宝塔面板在“网站 → 设置 → 配置文件”里编辑。ssl_protocols 等也可以写在 http 块里,对所有站点生效。

怎么知道 Nginx 用的是哪个 OpenSSL?

执行 nginx -V,输出里有 built with OpenSSL x.y.z。TLS 1.3 需要 1.1.1+,X25519MLKEM768 需要 3.5+。CentOS 7 上用系统 OpenSSL 1.0.2 编译的 Nginx 不支持 TLS 1.3。

要开 ssl_stapling 吗?

只有 CA 还在提供 OCSP 时才有用。2025 年 5 月以后签发的 Let's Encrypt 证书里没有 OCSP 地址,Nginx 会记一条警告,什么也不会装订。

为什么 ssl_prefer_server_ciphers 设成 off?

中级档列表里的套件都足够安全,让客户端自己选,没有 AES 硬件加速的手机可以选更快的 ChaCha20-Poly1305。

资料来源

  1. nginx ngx_http_ssl_module
  2. Mozilla Server Side TLS
  3. Let's Encrypt: Ending OCSP Support in 2025