必须使用 openssl 1.1.1+(如1.1.1w或3.0.13)编译 nginx,并通过 --with-openssl=/path/to/source 显式指定源码路径,启用 --with-http_ssl_module,再配置 ssl_protocols tlsv1.2 tlsv1.3 与专用套件。

要在 Nginx 编译安装阶段就支持强加密套件(如 TLS 1.3 的 AES-GCM、ChaCha20,以及 ECDHE+AEAD 类 TLS 1.2 套件),关键不是装完再调参数,而是从源头确保 Nginx 链接的是功能完整、版本合规的 OpenSSL,并在编译时显式启用相关模块。
确认并安装兼容的 OpenSSL 版本
强加密套件依赖底层 OpenSSL 的能力。Nginx 官方推荐使用 OpenSSL 1.1.1 或更高版本(如 3.0.x),因为它们原生支持 TLS 1.3 和现代 AEAD 密码套件。低于 1.1.1 的版本(如 1.0.2)不支持 TLS 1.3,也无法启用 TLS13-AES-256-GCM-SHA384 等标准套件。
- Ubuntu/Debian 系统可直接用包管理器安装:
sudo apt update && sudo apt install openssl libssl-dev - CentOS/RHEL 8+ 推荐启用 CRB 仓库后安装:
sudo dnf install openssl-devel - 若需自定义(如启用国密或补丁版),应下载源码编译,例如:
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl enable-tls1_3
编译 Nginx 时绑定指定 OpenSSL 路径
Nginx 默认可能链接系统旧版 OpenSSL,必须通过 --with-openssl= 显式指定路径,才能让其继承新版 OpenSSL 的全部密码能力。
- 解压 Nginx 源码后,进入目录执行 configure 命令,例如:
./configure \<br> --prefix=/usr/local/nginx \<br> --with-openssl=/path/to/openssl-source \<br> --with-http_ssl_module \<br> --with-http_v2_module
- 注意:
--with-openssl后跟的是 OpenSSL 源码路径(非安装路径),Nginx 会自动编译并静态链接;若想动态链接已安装的 OpenSSL,则省略该选项,但需确保pkg-config openssl --modversion输出 ≥1.1.1 - 务必启用
--with-http_ssl_module,否则 SSL 功能不可用
验证编译结果是否真正支持强套件
安装完成后不能只看配置语法正确,要确认 Nginx 实际加载的 OpenSSL 具备所需能力:
- 运行
nginx -V 2>&1 | grep -i openssl,输出中应包含你指定的 OpenSSL 版本号(如OpenSSL 3.0.12) - 用对应 OpenSSL 二进制检查可用套件:
/usr/local/openssl/bin/openssl ciphers -s -v 'TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384'
若返回具体算法行,说明支持;若报错“no cipher match”,说明 OpenSSL 编译未启用对应功能或 Nginx 未正确链接 - 启动 Nginx 后,用
openssl s_client -connect your.site:443 -tls1_3测试能否协商 TLS 1.3,再用-ciphersuites参数强制指定套件验证响应
配套配置要点(安装后必须设置)
即使编译正确,若 Nginx 配置未适配,强套件也不会生效:
- 在
server块中明确启用协议:ssl_protocols TLSv1.2 TLSv1.3;(禁用 TLS 1.0/1.1) - 按层级写
ssl_ciphers:TLS 1.3 套件(前缀TLS13-)必须放最前,TLS 1.2 套件紧随其后且仅保留ECDHE+AEAD组合(如ECDHE-ECDSA-AES128-GCM-SHA256) - 开启服务端优先:
ssl_prefer_server_ciphers on;,否则客户端可能忽略你的排序而选弱套件











