【问题标题】:Android: determine TLS support of device programmaticallyAndroid:以编程方式确定设备的 TLS 支持
【发布时间】:2017-08-08 21:10:06
【问题描述】:

所以我使用的主机最近禁用了 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 所述的 Play Services 来实现。

但我宁愿不用麻烦来实施这些类型的 hack(以及处理来自用户的任何问题),而只是接受任何运行我的应用程序但不支持 TLS 1.1/1.2 的设备应该使用 http 而不是比https。正如我所说,无论如何都不会传达任何被归类为“敏感”的信息。随着时间的推移,不支持 TLS 1.1/1.2 的设备数量将会减少。

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

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

【问题讨论】:

    标签: android ssl https


    【解决方案1】:

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

    试试这个:

    SSLParameters sslParameters;
    try {
        sslParameters = SSLContext.getDefault()
                .getDefaultSSLParameters();
    } catch (NoSuchAlgorithmException e) {
        // ...
    }
    
    // SSLv3, TLSv1, TLSv1.1, TLSv1.2 etc.
    sslParameters.getProtocols();
    

    【讨论】:

      【解决方案2】:

      使用提到的安全Provider 是最好的方法,使用@nandsito 的sn-p 非常适合调试(尤其是在三星Galaxy S3 等旧设备上,默认情况下具有SSLv3 和TLSv1,但没有TLSv1 .1 和 TLSv1.2)。

      【讨论】:

        猜你喜欢
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-29
        相关资源
        最近更新 更多