对于TLS,禁用除secp256之外的所有椭圆曲线?

时间:2015-01-19 04:42:38

标签: java android ssl

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

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

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

1 个答案:

答案 0 :(得分: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有一个api SSL_CTX_set_tmp_ecdh ()来设置ECDH曲线。 见:https://github.com/nginx/nginx/blob/master/src/event/ngx_event_openssl.c#L976 对不起,我不熟悉java,我不知道如何在android上的java中访问它。