为 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 之外的所有椭圆曲线?的主要内容,如果未能解决你的问题,请参考以下文章