2017年1月1日以後,所有iOS需要通路網頁的 App 都要面臨一個問題:ATS(App Transport Security)。由于 ATS 要求 HTTPS 通路,換句話來說,還有 13 天,蘋果就要對 APP 開發者們關閉 HTTP 的大門了。

ATS 全稱 App Transport Security,是 iOS 9 引入的一套安全機制,預設行為會強制保證所有的網絡請求都使用 HTTPS。
由于這樣的要求影響非常廣,蘋果也是考慮到開發者的過渡問題,預留了一些繞過 ATS 的方法。比如,可以通過在 <code>Info.plist</code> 中添加 <code>NSAppTransportSecurity</code> 字典并且将 <code>NSAllowsArbitraryLoads</code> 設定為 YES 來禁用 ATS。
但是到了 WWDC 16 後,蘋果對 ATS 的推進力度加大,要求從 2017 年 1 月 1 日起,所有的新送出 app 預設是不允許使用 <code>NSAllowsArbitraryLoads</code> 來繞過 ATS 限制的。
雖然還有其他的一些方法,但是緊随蘋果的腳步,采用 HTTPS 傳輸顯然是更好、更安全的一個選擇。繞過 ATS 協定并不是一個好的方案,蘋果強推 ATS 的目的,也是在于防止意外洩露個人資訊,并為應用程式提供預設安全行為。
在 APP 的伺服器上啟用 HTTPS 協定其實并沒有想象的那麼複雜,隻需要通過一些簡單的步驟部署 SSL 證書即可完成。
HTTPS,是指超文本傳輸安全協定(Hypertext Transfer Protocol Secure),是一種在 HTTP 協定基礎上進行傳輸加密的安全協定,能夠有效保障資料傳輸安全。
證書方面,可以選擇免費版的 Let's Encrypt,也可以購買權威機構頒發的 CA 證書。後者是一個更加可靠、安全的選擇,許多雲廠商也提供有類似的 SSL 證書服務,并且可以部署到 CDN 上。
由于筆者個人使用騰訊雲的服務比較多,下面以騰訊雲為例介紹如何申請、部署 SSL 證書。騰訊雲的 SSL 證書是由 GeoTrust 頒發的,可免費使用一年。如果你是阿裡雲或其他雲廠商的使用者,可以檢視各自對應的證書産品。
登入騰訊雲之後,前往 SSL 證書管理控制台,點選申請證書,會彈出證書選擇框。目前隻能選擇 GeoTrust 頒布的證書,後續似乎會開放更多證書廠商的産品。
接下來,需要填寫一些申請資訊,最重要的是綁定域名。假如你的域名的 abc.com,需要填寫的必須是類似 a.abc.com 這樣非頂級域名。
下一步,會要求手動進行 DNS 驗證。具體的步驟可參考産品文檔:域名驗證指引。
一般配置正确的話,很快就可以拿到屬于自己的免費證書了。據筆者個人的情況來看,大概一重新整理就可以通過稽核。
稽核通過後,可以在SSL 證書管理控制台看到證書下載下傳連結。先将證書下載下傳到本地,并上傳到 App的伺服器,為伺服器上安裝證書做好準備。
這裡,我們以較為常用 Nginx 為例介紹具體安裝過程。如果使用的是 Apache 或 IIS 等其他伺服器,請參考官方文檔。
Nginx檔案夾内獲得SSL證書檔案 <code>1_www.domain.com_bundle.crt</code> 和私鑰檔案 <code>2_www.domain.com.key</code>:
<code>1_www.domain.com_bundle.crt</code> 檔案包括兩段證書代碼 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”
<code>2_www.domain.com.key</code> 檔案包括一段私鑰代碼“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。
将域名 <code>www.domain.com</code> 的證書檔案 <code>1_www.domain.com_bundle.crt</code> 、私鑰檔案 <code>2_www.domain.com.key</code> 儲存到同一個目錄,例如 <code>/usr/local/nginx/conf</code> 目錄下。
更新Nginx根目錄下 <code>conf/nginx.conf</code> 檔案如下:
配置完成後,先用 <code>bin/nginx –t</code> 來測試下配置是否有誤。正确無誤的話,重新開機 nginx,就可以使 https://www.domain.com 來通路了。
很多網站都會使用 CDN 服務,因為雲廠商一般有提供一些免費的 CDN 流量額度,比如騰訊雲就有 60GB 的免費流量。
對于使用了 CDN 的 App 或網站,還可以将 HTTPS 部署在全網 CDN 節點,實作全網資料加密傳輸功能。
域名管理頁面,域名的狀态為 部署中 或 已啟動。
域名不是由 COS 同步而來的 .file.myqcloud.com 字尾域名。
域名的接入方式為 自有源 或者 COS源、FTP源。
登入CDN控制台,進入 【域名管理】 頁面,點選域名右側 管理 按鈕,進入管理頁面:
在 【進階配置】中找到 HTTPS 配置子產品
騰訊雲 CDN 目前支援兩種方式部署證書:
自有證書:将自有證書、私鑰内容上傳至 CDN 進行部署,全程加密傳輸,證書不落地,保障您的證書安全。
騰訊雲托管證書:也就是上面咱們已經申請成功的 SSL 證書。
前往CDN進階工具-證書管理界面,
根據情況選擇希望配置證書的域名、證書類型和回源方式即可。這裡需要滿足前面提到的這個條件:域名的狀态為 部署中 或 已啟動。
勾選“騰訊托管證書”後,可以在證書清單下拉菜單中找到剛才申請到的證書。回源方式選擇為 HTTPS,之後送出即可。
證書配置成功後,會出現 強制跳轉 開關,開啟後,即使使用者發起 HTTP 請求,也會強制跳轉為 HTTPS進行通路。
完成上面一系列的操作之後,還需要最後确認部署的 SSL 證書是否符合 ATS 要求。否則,折騰了那麼久,最終卻是做了無用功的話,那是非常痛苦的一件事。
對此,雲廠商也是提供了較為友善的檢測方式,隻需要輸入目标域名即可一鍵檢測。
至此,就完成了 App 伺服器的 SSL 證書部署,并滿足了蘋果 ATS 協定的嚴格要求。
相關推薦