Android:以编程方式确定设备的TLS支持

drm*_*wer 3 ssl https android

所以我使用的主机最近禁用了TLS 1.0,所以对于任何不支持TLS 1.0的设备,我都需要使用http而不是https(无论如何都不会发送任何敏感信息......我只想在可能的情况下使用SSL) .

看起来自API 16以来一直支持TLS 1.1/1.2,但是在API 20或21周围默认情况下不启用.有关确切何时切换默认值的报告存在冲突.参见例如此处(来自API 20的建议)和此处(来自API 21的建议).而且似乎有些设备甚至在API 20之前都启用了TLS 1.1/1.2支持,可能是因为制造商调整了一些事情来实现这一点.

我知道可以在支持它的设备上启用TLS 1.1/1.2(参见此处),也许甚至可以通过此处所述的Play服务来实现.

但我宁愿没有实现这些类型的黑客(以及处理来自用户的任何问题)的麻烦,并且只是接受运行我的应用程序但尚未支持TLS 1.1/1.2的任何设备应该使用http而不是https.正如我所说,无论如何都不会被归类为"敏感".随着时间的推移,不支持TLS 1.1/1.2的设备数量将减少.

那么,话虽如此,有没有一种方法可以通过编程方式确定设备支持哪些TLS版本?

目前我只是使用API​​版本进行此检查("从API 21开始使用https"),但最好更明确地检查TLS支持,因为一些旧设备也支持TLS 1.1/1.2.

nan*_*ito 8

那么,话虽如此,有没有一种方法可以通过编程方式确定设备支持哪些TLS版本?

试试这个:

SSLParameters sslParameters;
try {
    sslParameters = SSLContext.getDefault()
            .getDefaultSSLParameters();
} catch (NoSuchAlgorithmException e) {
    // ...
}

// SSLv3, TLSv1, TLSv1.1, TLSv1.2 etc.
sslParameters.getProtocols();
Run Code Online (Sandbox Code Playgroud)