在 Android 2.3.3 上实现 TLS 1.2
我一直在尝试在 Android 上实现 TLS 1.2。我创建了一个 SSLSocket s,但是当我运行 s.getSupportedProtocols() 时,TLS 1.2 不是选项之一。支持 TLSv1 和 SSLv3,但不支持 TLSv1.2。
关于这个问题,我需要的密码套件也不在那里(TLS_ECDHE_ECDSA_WITH_AES_256_...)
知道我可以导入或做什么来在android上启用TLSv1.2和该密码吗?我有什么遗漏的吗?任何想法都会有帮助!谢谢!
I have been trying to implement TLS 1.2 on Android. I create an SSLSocket s but when I run s.getSupportedProtocols(), TLS 1.2 is not one of the options. TLSv1 and SSLv3 are supported but TLSv1.2 is not.
In relation to that question, the ciphersuite I need is also not on there (TLS_ECDHE_ECDSA_WITH_AES_256_...)
Any idea on what I could import or do to enable TLSv1.2 and that cipher on android? Is there something I am missing? Any ideas would be helpful! Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
仅出于文档目的(这个问题已有 3.5 年历史) - Android API 文档有每个 API 级别支持的 SSL/TLS 列表,包括特定的密码套件: https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
Just for documentation purpose (this question is 3.5 years old) - Android API documentation has a list of supported SSL/TLS per API level, including specific cipher suites: https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
如果它不存在,您就无法真正启用它。要添加对 TLSv1.2 的支持,您需要添加新的 JSSE 提供程序(并非微不足道),或者如果您只需要一个套接字,则可能使用 OpenSSL 在本机代码中实现它。或者如果可以的话,直接使用 JB。
You can't really enable it if it is not there. To add support for TLSv1.2 you need to either add a new JSSE provider (not trivial), or if you only need a socket, probably implement it in native code using OpenSSL. Or simply use JB if you can.
如果您仍然坚持使用 2.3,您最好的选择是使用 NDK 创建(或使用)适用于 Android 的 OpenSSL 端口。 OpenSSL 有一个适用于 Android 的配置选项。使用 NDK,您可以构建静态链接库或动态链接库。然后使用 JNI 并在那里设置 TLS 1.2 会话。即使您使用 JB,您也必须首先启用 TLS 1.2。您的整个密码套件未列出,因此它可能在 JB 中仍然不可用,例如 _GCM。
此表显示了哪个 API 级别支持哪些密码套件。
此 stackoverflow 链接还包含有关构建在 Android 上使用的 openssl 的信息。
If you are still stuck with 2.3 your best option would be to create (or use) an OpenSSL port for Android using NDK. OpenSSL has a configure options for Android. Using the NDK you can build either statically linked libraries or dynamically linked ones. Then use JNI and setup your TLS 1.2 session there. Even if you use JB you would have to first enable TLS 1.2. Your entire cipher suite is not listed so it is a possibility that it is still not available in JB, e.g, _GCM.
This table shows which cipher suites are supported by which API level.
This stackoverflow link also contains info on building openssl for use on Android.