SSLOpenSSLConfCmd Curves 仅在 Apache 2.4.11+ 且 OpenSSL ≥1.0.2 时有效,需置于 内,值为冒号分隔的曲线名(如 X25519:secp256r1),顺序即客户端优先级,拼写大小写敏感,配置后须重启并用 openssl s_client 验证。

要在 Apache 中用 SSLOpenSSLConfCmd 设置特定椭圆曲线(ECC),核心是正确指定 Curves 参数,并确保运行环境满足最低要求。它不是简单加一行就生效,而是依赖版本、模块加载和作用域限制。
确认前提条件是否满足
该指令仅在 Apache 2.4.11 及以上 + OpenSSL 1.0.2 或更新版本中有效。低于此版本会静默忽略,不报错也不生效。
- 运行
httpd -V | grep "Server version"查看 Apache 版本 - 运行
openssl version确认 ≥ 1.0.2 - 检查配置中已启用
mod_ssl且虚拟主机内设置了SSLEngine on - 临时加一行
SSLOpenSSLConfCmd nonsense test,再执行httpd -t—— 若无报错,说明该指令未被识别,需升级
在虚拟主机中配置 Curves 参数
SSLOpenSSLConfCmd Curves 必须写在 块内,不能放在全局或 .htaccess 中。值为冒号分隔的曲线名,顺序即客户端优先级。
- 推荐组合(兼顾安全与兼容):
SSLOpenSSLConfCmd Curves X25519:secp256r1:secp384r1 - 如需禁用 NIST 曲线(如 secp521r1、sect571r1),不列出来即可;OpenSSL 不会通告未指定的曲线
- 避免使用已知弱曲线,例如
secp112r1、sect163k1,它们不在现代默认列表中,但显式列出即启用 - 注意大小写和拼写:必须是 OpenSSL 内部识别的名称(如
X25519不是x25519或curve25519)
验证曲线是否实际生效
配置保存后重启 Apache,用 OpenSSL 客户端测试服务器通告的曲线:
openssl s_client -connect yourdomain.com:443 -tls1_2 -cipher ECDHE -servername yourdomain.com 2>/dev/null | grep -i "ecdh curve"- 或使用在线工具(如 SSL Labs 的 SSL Test),查看 “Key Exchange” 一栏中的 “Server key exchange info”
- 若返回曲线名与配置一致(如
secp256r1),说明生效;若仍是旧默认(如含sect571r1),则可能是版本不支持或配置位置错误
搭配其他 SSLOpenSSLConfCmd 提升安全性
单独设曲线不够,建议同步关闭不安全协商行为:
- 禁用不安全重协商:
SSLOpenSSLConfCmd Options -UnsafeLegacyRenegotiation - 如只支持 TLS 1.2+,可关闭旧协议:
SSLOpenSSLConfCmd SSL_OP_NO_TLSv1 SSL_OP_NO_TLSv1_1 - 注意:这些
Options值是 OpenSSL 的宏名,大小写敏感,拼错无效且无提示











