所以我使用的主机最近禁用了TLS 1.0,所以对于任何不支持TLS 1.0的设备,我都需要使用http而不是https(无论如何都不会发送任何敏感信息……我只想在可能的情况下使用SSL) .
看起来自API 16以来一直支持TLS 1.1 / 1.2,但是在API 20或21周围默认情况下不启用.有关确切何时切换默认值的报告存在冲突.参见例如here(来自API 20的建议)和here(来自API 21的建议).而且似乎有些设备甚至在API 20之前都启用了TLS 1.1 / 1.2支持,可能是因为制造商调整了一些事情来实现这一点.
我知道可以在支持它的设备上启用TLS 1.1 / 1.2(参见例如here),甚至可以通过播放服务来实现,如here所述.
但我宁愿没有实现这些类型的黑客(以及处理来自用户的任何问题)的麻烦,并且只是接受运行我的应用程序但尚未支持TLS 1.1 / 1.2的任何设备应该使用http而不是https.正如我所说,无论如何都不会被归类为“敏感”.随着时间的推移,不支持TLS 1.1 / 1.2的设备数量将减少.
那么,话虽如此,有没有一种方法可以通过编程方式确定设备支持哪些TLS版本?
目前我只是使用API版本进行此检查(“从API 21开始使用https”),但最好更明确地检查TLS支持,因为一些旧设备也支持TLS 1.1 / 1.2.
解决方法:
So, with that said, is there a way of programmatically determining what TLS versions are supported by the device?
试试这个:
SSLParameters sslParameters;
try {
sslParameters = SSLContext.getDefault()
.getDefaultSSLParameters();
} catch (NoSuchAlgorithmException e) {
// ...
}
// SSLv3, TLSv1, TLSv1.1, TLSv1.2 etc.
sslParameters.getProtocols();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。