1. 程式人生 > >譯文2——在Android P中預設使用TLS保護使用者

譯文2——在Android P中預設使用TLS保護使用者

前言

有開發的好友和我提起,谷歌在Android P 中預設使用TLS保護使用者,會造成部分Android8.0系統手機無法正常訪問網路,於是我找到有關於這個的資訊。我在谷歌Android官方找到有關於這個文章:

譯文

在Android P中預設使用TLS保護使用者

2018年10月 Android高階軟體安全工程師,Chad Brubaker釋出

Android致力於保持使用者、裝置和資料的安全。我們保護資料安全的方法之一是通過保護進入或離開傳輸層安全(TLS)傳輸中的Android裝置的所有資料。正如我們在Android P開發者預覽中宣佈的,我們正在通過防止針對Android P的應用程式預設允許未加密連線來進一步改進這些保護。

為了更好地保護Android使用者,我們在這些年裡做了很多改變。為了防止意外的未加密連線,我們在Android Marshmallow中引入了android:usesCleartextTraffic manifest屬性。在Android Nougat中,我們通過建立網路安全配置特性來擴充套件該屬性,該特性允許應用程式指示它們不打算在沒有加密的情況下發送網路流量。在Android 7.0和8.0中,我們仍然允許使用明文連線。

如何更新我的應用程式?

如果你的應用程式使用TLS來連線所有的連線,那麼你就無事可做了。如果沒有,更新您的應用程式使用TLS加密所有連線。如果您仍然需要建立明文連線,請繼續閱讀一些最佳實踐。

我為什麼要使用TLS?

Android認為所有的網路都可能是敵對的,所以所有的連線都應該使用加密的流量。移動裝置尤其處於危險之中,因為它們經常連線到許多不同的網路,比如咖啡店的Wi-Fi。

所有流量都應該被加密,不管內容如何,因為任何未加密的連線都可用於注入內容、增加潛在易受攻擊的客戶端程式碼的攻擊面或跟蹤使用者。欲瞭解更多資訊,請參閱我們過去的部落格文章和開發者峰會。

TLS不慢嗎?

不,不是的。

如何在我的應用程式中使用TLS?

一旦您的伺服器支援TLS,只需更改應用程式中的URL和http://到https://的伺服器響應。您的HTTP堆疊處理TLS握手而無需再做任何工作。

如果你自己建立一個sockets,就用一個SSLSocketFactory 代替SocketFactory。請小心使用Socket,因為SSLocket不執行主機名驗證。您的應用程式需要執行自己的主機名驗證,最好是使用預期的主機名呼叫getDefaultHostnameVerifier()方法。此外,請注意,HostnameVerifier.verify()方法不會對錯誤丟擲異常,而是返回必須顯式檢查的boolean結果。

我需要使用明文流量

雖然應該對所有連線使用TLS,但是可能由於遺留原因(例如連線到一些伺服器)需要使用明文流量。要做到這一點,改變應用程式的網路安全配置允許這些連線。

我們已經包括了幾個示例配置。請參閱“網路安全配置檔案”以獲得更多幫助。

允許到特定域的明文連線

如果需要允許連線到特定域或域集合,可以使用以下配置作為指南:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
        <domain includeSubdomains="true">insecure.cdn.example.com</domain>
    </domain-config>
</network-security-config>
允許連線到任意不安全域

如果您的應用程式支援通過不安全連線從URL開啟任意內容,則應該禁用到您自己的服務的明文連線,同時支援到任意主機的明文連線。請記住,對於通過不安全連線接收的資料,您應該謹慎,因為它可能在傳輸過程中被篡改。

<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="true">cdn.example2.com</domain>
    </domain-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

如何更新我的庫?

如果您的庫直接建立安全/不安全的連線,請確保它在開啟任何明文連線之前通過檢查isCleartextTrafficPermitted來遵守應用程式的明文設定。