Android 5.0使用OpenSSL并且它提供TLS 1.2支持(来自AOSP patches and diffs,它看起来像OpenSSL 1.0.0)。 Android客户端提供椭圆曲线动物园(所有这些都包括素数和二进制,以及弱和受伤的曲线)。我想将曲线限制在secp256以进行测试。
我无法在SSLSocketFactory
等类中找到设置。
如何禁用除TLS中使用的secp256之外的所有曲线?
答案 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中访问它。