还有 13 天,苹果就要关上 HTTP 大门了
2017年1月1日以后,所有iOS需要訪問網頁的 App 都要面臨一個問題:ATS(App Transport Security)。由于 ATS 要求 HTTPS 訪問,換句話來說,還有 13 天,蘋果就要對 APP 開發者們關閉 HTTP 的大門了。
1、什么是 ATS?
ATS 全稱 App Transport Security,是 iOS 9 引入的一套安全機制,默認行為會強制保證所有的網絡請求都使用 HTTPS。
2、繞過 ATS?
由于這樣的要求影響非常廣,蘋果也是考慮到開發者的過渡問題,預留了一些繞過 ATS 的方法。比如,可以通過在 Info.plist 中添加 NSAppTransportSecurity 字典并且將 NSAllowsArbitraryLoads 設置為 YES 來禁用 ATS。
但是到了 WWDC 16 后,蘋果對 ATS 的推進力度加大,要求從 2017 年 1 月 1 日起,所有的新提交 app 默認是不允許使用 NSAllowsArbitraryLoads 來繞過 ATS 限制的。
雖然還有其他的一些方法,但是緊隨蘋果的腳步,采用 HTTPS 傳輸顯然是更好、更安全的一個選擇。繞過 ATS 協議并不是一個好的方案,蘋果強推 ATS 的目的,也是在于防止意外泄露個人信息,并為應用程序提供默認安全行為。
3、啟用 HTTPS
在 APP 的服務器上啟用 HTTPS 協議其實并沒有想象的那么復雜,只需要通過一些簡單的步驟部署 SSL 證書即可完成。
HTTPS,是指超文本傳輸安全協議(Hypertext Transfer Protocol Secure),是一種在 HTTP 協議基礎上進行傳輸加密的安全協議,能夠有效保障數據傳輸安全。
證書方面,可以選擇免費版的 Let's Encrypt,也可以購買權威機構頒發的 CA 證書。后者是一個更加可靠、安全的選擇,許多云廠商也提供有類似的 SSL 證書服務,并且可以部署到 CDN 上。
由于筆者個人使用騰訊云的服務比較多,下面以騰訊云為例介紹如何申請、部署 SSL 證書。騰訊云的 SSL 證書是由 GeoTrust 頒發的,可免費使用一年。如果你是阿里云或其他云廠商的用戶,可以查看各自對應的證書產品。
3.1、申請證書
登錄騰訊云之后,前往 SSL 證書管理控制臺,點擊申請證書,會彈出證書選擇框。目前只能選擇 GeoTrust 頒布的證書,后續似乎會開放更多證書廠商的產品。
接下來,需要填寫一些申請信息,最重要的是綁定域名。假如你的域名的 abc.com,需要填寫的必須是類似 a.abc.com 這樣非頂級域名。
下一步,會要求手動進行 DNS 驗證。具體的步驟可參考產品文檔:域名驗證指引。
一般配置正確的話,很快就可以拿到屬于自己的免費證書了。據筆者個人的情況來看,大概一刷新就可以通過審核。
3.2、服務器安裝證書
審核通過后,可以在SSL 證書管理控制臺看到證書下載鏈接。先將證書下載到本地,并上傳到 App的服務器,為服務器上安裝證書做好準備。
這里,我們以較為常用 Nginx 為例介紹具體安裝過程。如果使用的是 Apache 或 IIS 等其他服務器,請參考官方文檔。
3.2.1 獲取證書
Nginx文件夾內獲得SSL證書文件 1_www.domain.com_bundle.crt 和私鑰文件 2_www.domain.com.key:
1_www.domain.com_bundle.crt 文件包括兩段證書代碼 “-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”
2_www.domain.com.key 文件包括一段私鑰代碼“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”。
3.2.2 證書安裝
將域名 www.domain.com 的證書文件 1_www.domain.com_bundle.crt 、私鑰文件 2_www.domain.com.key 保存到同一個目錄,例如 /usr/local/nginx/conf 目錄下。
更新Nginx根目錄下 conf/nginx.conf 文件如下:
server {listen 443;server_name www.domain.com; #填寫綁定證書的域名ssl on;ssl_certificate 1_www.domain.com_bundle.crt;ssl_certificate_key 2_www.domain.com.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置ssl_prefer_server_ciphers on;location / {root html; #站點目錄index index.html index.htm;}}配置完成后,先用 bin/nginx –t 來測試下配置是否有誤。正確無誤的話,重啟 nginx,就可以使 https://www.domain.com 來訪問了。
4. CDN 上部署 HTTPS
很多網站都會使用 CDN 服務,因為云廠商一般有提供一些免費的 CDN 流量額度,比如騰訊云就有 60GB 的免費流量。
對于使用了 CDN 的 App 或網站,還可以將 HTTPS 部署在全網 CDN 節點,實現全網數據加密傳輸功能。
4.1 配置 HTTPS 的條件:
域名管理頁面,域名的狀態為 部署中 或 已啟動。
域名不是由 COS 同步而來的 .file.myqcloud.com 后綴域名。
域名的接入方式為 自有源 或者 COS源、FTP源。
登錄CDN控制臺,進入 【域名管理】 頁面,點擊域名右側 管理 按鈕,進入管理頁面:
在 【高級配置】中找到 HTTPS 配置模塊
4.2 證書類型
騰訊云 CDN 目前支持兩種方式部署證書:
自有證書:將自有證書、私鑰內容上傳至 CDN 進行部署,全程加密傳輸,證書不落地,保障您的證書安全。
騰訊云托管證書:也就是上面咱們已經申請成功的 SSL 證書。
4.3 證書配置
前往CDN高級工具-證書管理界面,
根據情況選擇希望配置證書的域名、證書類型和回源方式即可。這里需要滿足前面提到的這個條件:域名的狀態為 部署中 或 已啟動。
勾選“騰訊托管證書”后,可以在證書列表下拉菜單中找到剛才申請到的證書。回源方式選擇為 HTTPS,之后提交即可。
證書配置成功后,會出現 強制跳轉 開關,開啟后,即使用戶發起 HTTP 請求,也會強制跳轉為 HTTPS進行訪問。
檢測部署效果
完成上面一系列的操作之后,還需要最后確認部署的 SSL 證書是否符合 ATS 要求。否則,折騰了那么久,最終卻是做了無用功的話,那是非常痛苦的一件事。
對此,云廠商也是提供了較為方便的檢測方式,只需要輸入目標域名即可一鍵檢測。
至此,就完成了 App 服務器的 SSL 證書部署,并滿足了蘋果 ATS 協議的嚴格要求。
總結
以上是生活随笔為你收集整理的还有 13 天,苹果就要关上 HTTP 大门了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何实时查看mysql当前连接数
- 下一篇: CS大战