Apache中通过SSLOpenSSLConfCmd调优TLS 1.3需满足:Apache≥2.4.17、OpenSSL≥1.1.1、mod_ssl启用且SSLEngine on;常用配置包括Curves指定X25519:secp256r1等曲线优先级、SignatureAlgorithms设定签名算法、Options禁用UnsafeLegacyRenegotiation。

要在 Apache 中通过 SSLOpenSSLConfCmd 设置 TLS 1.3 加密算法偏好,关键不是“选择算法”,而是控制 OpenSSL 底层对密钥交换、签名和曲线的通告顺序与启用状态——TLS 1.3 的加密套件(如 TLS_AES_128_GCM_SHA256)本身由 SSLCipherSuite 决定,而 SSLOpenSSLConfCmd 负责调优其依赖的底层参数。
确认前提条件是否满足
该指令仅在以下组合下生效,缺一不可:
- Apache ≥ 2.4.17(推荐 2.4.37+,确保 TLS 1.3 全功能支持)
- OpenSSL ≥ 1.1.1(必须,TLS 1.3 依赖此版本及以上)
-
mod_ssl已加载且虚拟主机中已启用SSLEngine on - 配置位置正确:只能出现在服务器级或
<virtualhost></virtualhost>块内,不能写在.htaccess或全局配置块外
设置密钥交换曲线优先级(最常用)
TLS 1.3 握手依赖椭圆曲线(ECC)进行密钥交换,客户端会根据服务器通告的曲线顺序选择。用 Curves 参数显式指定并排序:
-
SSLOpenSSLConfCmd Curves X25519:secp256r1:secp384r1→ 优先使用高性能、抗侧信道的 X25519,其次为广泛兼容的 secp256r1(NIST P-256),最后是 secp384r1 - 避免使用
sect*或secp521r1等低效或不常用曲线 - 不配置时,OpenSSL 使用编译默认值(可能含弱曲线),因此显式声明更安全
控制签名算法偏好(影响证书验证路径)
服务器在 CertificateVerify 消息中使用的签名算法,由 SignatureAlgorithms 控制,这对 ECDSA 或 RSA-PSS 证书很关键:
SSLOpenSSLConfCmd SignatureAlgorithms rsa_pss_rsae_sha256:ecdsa_secp256r1_sha256:rsa_pkcs1_sha256- 若使用国密 SM2 证书,需对应添加
sm2sig_sm3(要求 OpenSSL 3.0+ 及国密引擎支持) - 该设置不影响 TLS 1.3 套件本身,但决定握手阶段签名能否被客户端接受
禁用不安全协商选项(加固 TLS 1.3 行为)
部分 TLS 1.3 实现曾兼容早期草案(如 draft-28),或允许不安全重协商,可用 Options 关闭:
-
SSLOpenSSLConfCmd Options -UnsafeLegacyRenegotiation→ 彻底禁用 TLS 1.2 及更早的不安全重协商机制 -
SSLOpenSSLConfCmd Options -ServerPreference→ 注意:此选项在多数场景下**不建议关闭**;保持默认(即开启 ServerPreference)才能让服务器按SSLCipherSuite和SSLOpenSSLConfCmd Curves顺序主导协商 - 拼写必须精确,
-UnsafeLegacyRenegotiation大小写敏感,写错不会报错但无效
配置完成后务必执行 httpd -t 验证语法,并用 openssl s_client -connect example.com:443 -tls1_3 -msg 观察 ClientHello 中的 supported_groups 和 signature_algorithms 字段,确认实际通告内容与预期一致。


















