1. 程式人生 > >OkHttp完全解析(五)HTTPS

OkHttp完全解析(五)HTTPS

OkHttp試圖平衡連個相互競爭的問題:

儘可能多的主機連線: 包括執行最新版boringssl的高階主機和執行老版OpenSSL的陳舊主機。

連線的安全性: 通過證書進行遠端web伺服器驗證和通過強加密保證資料交換的私密性。

當與一個HTTPS伺服器進行協商時, OkHttp需要知道應當提供哪個版本的TLS和加密路線。一個想要使連線最大化的客戶端可能包含陳舊的TLS版本,以及設計弱化的加密套件。一個想要使安全性更高的嚴格客戶端則被限制使用最新版的TLS和最強的加密套件。

   # MODERN_TLS 是一種連線到現代HTTPS伺服器的安全配置。

   # COMPATIBLE_TLS 是一種連線到安全但是不實時的HTTPS

服務的安全配置。

   # CLEARTEXT 是一種使用在http://URL中的安全配置。

預設情況下,OkHttp會嘗試一個MODERN_TLS連線,如果不可行,則轉換到COMPATIBLE_TLS連線。 在特定連線型別中的TLS版本和加密套件會相互轉換。例如,在OkHttp2.2中,因為POODLE攻擊,OkHttp放棄了對SSL3.0的支援, 在OkHttp2.3中,放棄了對RC4的支援。所以,跟你桌面瀏覽器一樣而言,保持最新版的OkHttp是確保安全的最佳方式。

也可以通過一個自定義的TLS版本集合和加密套件,建立自定義的連線設定。例如,這個配置被限制使用三個相對安全性較高的加密套件。缺點是隻支援Android 5.0+和同樣的web伺服器。


6.1 證書鎖定

預設請情況下,OkHttp信任主平臺的證書授權。這種策略可以使連線最大化,但是受患於授權機構的攻擊,比如 2011 DigiNotar attack。 同時也假設你的HTTPS伺服器被同一個授權機構簽約。


可以使用CertificatePinner限制哪個認證中心被信任。證書鎖定可以增加安全性,但是限制了你的伺服器團隊更新他們TLS證書的能力。在沒有伺服器TLS 管理員允許的情況下,不要使用證書鎖定。


6.2 自定義信任的證書

   完整的程式碼例項展示瞭如何通過你自己的設定替換主平臺的證書授權。跟上面一樣,在沒有伺服器TLS管理員守護的情況下,不要使用自定義證書。