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

问题描述:

因此,我使用的主机最近禁用了TLS 1.0,因此对于任何不支持TLS 1.0的设备,我需要使用http而不是https(无论如何都不发送敏感信息...我只是希望尽可能使用SSL)。Android:以编程方式确定设备对TLS的支持

从API 16开始支持TLS 1.1/1.2,但由于API 20或21的缺省情况,缺省情况下未启用TLS 1.1/1.2。关于默认切换时间的报告存在冲突。见例如(根据API 20建议)和here(从API 21建议)。而且似乎有些设备甚至在API 20之前都支持TLS 1.1/1.2支持,可能是因为制造商调整了一些东西来实现这一目标。

我知道可以在支持它的设备上启用TLS 1.1/1.2(例如,请参阅here),并且可能甚至可以通过Play服务进行操作,如here所述。

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

那么,这样说,有没有一种方式来编程确定设备支持哪些TLS版本?

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

那么,这样说,是否有一种编程方式来确定设备支持哪些TLS版本?

试试这个:

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

// SSLv3, TLSv1, TLSv1.1, TLSv1.2 etc. 
sslParameters.getProtocols();