为 TLS 禁用除 secp256 之外的所有椭圆曲线?

Posted

技术标签:

【中文标题】为 TLS 禁用除 secp256 之外的所有椭圆曲线?【英文标题】:Disable all elliptic curves except secp256 for TLS? 【发布时间】:2015-01-19 04:42:37 【问题描述】:

android 5.0 使用 OpenSSL 并提供 TLS 1.2 支持(来自AOSP patches and diffs,它看起来像 OpenSSL 1.0.0)。 Android 客户端提供椭圆曲线动物园(所有这些,包括素数和二元曲线,以及弱曲线和受伤曲线)。我想将曲线限制为仅 secp256 进行测试。

我无法在 SSLSocketFactory 等类中找到设置。

如何禁用 TLS 中使用的除 secp256 之外的所有曲线?

【问题讨论】:

【参考方案1】:

在 openssl 库中,曲线定义在一个静态数组中:

https://android.googlesource.com/platform/external/openssl/+/master/crypto/ec/ec_curve.c 1832 行

在静态数组curve_list;

openssl 库不提供任何 api 来操作这个数组, 所以如果你使用android系统提供的 libcrypt.so ,没有正常的方法来操作这个数组。

如果使用jni,可以重新编译一个自定义的openssl,删除curve_list中的其他曲线

如果使用java, 由于EC主要用于ECDH和ECDSA,

1.ECDSA中使用的曲线由证书决定,只需使用secp256生成EC证书即可。

2.在 ECDH openssl 中有一个 apiSSL_CTX_set_tmp_ecdh () 来设置 ECDH 曲线。 见:https://github.com/nginx/nginx/blob/master/src/event/ngx_event_openssl.c#L976 对不起,我不熟悉java,我不知道如何在android上的java中访问它。

【讨论】:

以上是关于为 TLS 禁用除 secp256 之外的所有椭圆曲线?的主要内容,如果未能解决你的问题,请参考以下文章

ANFS | ED25519密钥体系 技术一小步 行业发展一大步

如何禁用表单上除按钮之外的所有控件?

Kubernetes 证书支持哪些椭圆曲线?

如何使用角度链接功能禁用除特定元素之外的所有点击

在 WPF 窗口中禁用除一个子控件之外的所有子控件

为除管理员之外的所有用户禁用Wordpress管理栏