Netty使用SslProvider.OPENSSL时限制ECDHE椭圆曲线配置问题咨询
问题2:具体配置方案
方案1:Netty API直接配置(适用Netty版本 >= 4.1.58.Final)
该版本起Netty官方新增了OpenSslContextOption.NAMED_GROUPS配置项,可直接在初始化SslContext时指定椭圆曲线白名单,按优先级排序填写即可:
import io.netty.handler.ssl.OpenSslContextOption; SslContextBuilder contextBuilder = SslContextBuilder.forServer(keyMngrFactory) .sslProvider(SslProvider.OPENSSL) .enableOcsp(true) // 配置椭圆曲线白名单,多个曲线用英文逗号分隔,靠前的优先级更高 .option(OpenSslContextOption.NAMED_GROUPS, "secp384r1,secp256r1,x25519");
注:曲线名称需和OpenSSL支持的命名保持一致:P-256对应
secp256r1、P-384对应secp384r1、P-521对应secp521r1、X25519对应x25519。
方案2:OpenSSL配置文件全局生效(适用所有版本)
如果使用的Netty版本较低没有上述API,可以通过OpenSSL全局配置实现限制:
- 在启动参数中添加系统变量指定OpenSSL配置文件路径:
-Dopenssl.conf=/path/to/your/openssl.cnf
- 编辑配置文件内容如下:
openssl_conf = default_conf [default_conf] ssl_conf = ssl_sect [ssl_sect] system_default = system_default_sect [system_default_sect] Groups = secp384r1:secp256r1:x25519
该配置会对当前进程内所有基于OpenSSL的TLS实例生效,多个曲线用英文冒号分隔,靠前的优先级更高。
生效验证
配置完成后可使用以下命令验证:
# 用白名单外的曲线发起握手,预期握手失败 openssl s_client -connect <你的服务地址端口> -curves secp521r1
也可以通过抓包查看TLS握手阶段的ServerHello扩展,确认supported_groups返回的是你配置的白名单列表。
内容的提问来源于stack exchange,提问作者ramtech
相关产品推荐
相关产品推荐

