2017-03-17 100 views
1

因此,我使用的主機最近禁用了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 。

回答

4

那麼,這樣說,是否有一種編程方式來確定設備支持哪些TLS版本?

試試這個:

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

// SSLv3, TLSv1, TLSv1.1, TLSv1.2 etc. 
sslParameters.getProtocols(); 
相關問題