版權聲明:本文由賀嘉 原創文章,轉載請註明出處:
文章原文連接:https://www.qcloud.com/community/article/274113001482113656html
來源:騰雲閣 https://www.qcloud.com/communitynginx
2017年1月1日之後,全部iOS須要訪問網頁的 App 都要面臨一個問題:ATS(App Transport Security)。因爲 ATS 要求 HTTPS 訪問,換句話來講,還有 13 天,蘋果就要對 APP 開發者們關閉 HTTP 的大門了。安全
ATS 全稱 App Transport Security,是 iOS 9 引入的一套安全機制,默認行爲會強制保證全部的網絡請求都使用 HTTPS。服務器
因爲這樣的要求影響很是廣,蘋果也是考慮到開發者的過渡問題,預留了一些繞過 ATS 的方法。好比,能夠經過在 Info.plist
中添加 NSAppTransportSecurity
字典而且將 NSAllowsArbitraryLoads
設置爲 YES 來禁用 ATS。網絡
可是到了 WWDC 16 後,蘋果對 ATS 的推動力度加大,要求從 2017 年 1 月 1 日起,全部的新提交 app 默認是不容許使用 NSAllowsArbitraryLoads
來繞過 ATS 限制的。session
雖然還有其餘的一些方法,可是緊隨蘋果的腳步,採用 HTTPS 傳輸顯然是更好、更安全的一個選擇。繞過 ATS 協議並非一個好的方案,蘋果強推 ATS 的目的,也是在於防止意外泄露我的信息,併爲應用程序提供默認安全行爲。app
在 APP 的服務器上啓用 HTTPS 協議其實並無想象的那麼複雜,只須要經過一些簡單的步驟部署 SSL 證書便可完成。dom
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證書文件 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-----」。將域名 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 來訪問了。
不少網站都會使用 CDN 服務,由於雲廠商通常有提供一些免費的 CDN 流量額度,好比騰訊雲就有 60GB 的免費流量。
對於使用了 CDN 的 App 或網站,還能夠將 HTTPS 部署在全網 CDN 節點,實現全網數據加密傳輸功能。
登陸CDN控制檯,進入 【域名管理】 頁面,點擊域名右側 管理 按鈕,進入管理頁面:
在 【高級配置】中找到 HTTPS 配置模塊
騰訊雲 CDN 目前支持兩種方式部署證書:
前往CDN高級工具-證書管理界面,
根據狀況選擇但願配置證書的域名、證書類型和回源方式便可。這裏須要知足前面提到的這個條件:域名的狀態爲 部署中 或 已啓動。
勾選「騰訊託管證書」後,能夠在證書列表下拉菜單中找到剛纔申請到的證書。回源方式選擇爲 HTTPS,以後提交便可。
證書配置成功後,會出現 強制跳轉 開關,開啓後,即便用戶發起 HTTP 請求,也會強制跳轉爲 HTTPS進行訪問。
完成上面一系列的操做以後,還須要最後確認部署的 SSL 證書是否符合 ATS 要求。不然,折騰了那麼久,最終倒是作了無用功的話,那是很是痛苦的一件事。
對此,雲廠商也是提供了較爲方便的檢測方式,只須要輸入目標域名便可一鍵檢測。
至此,就完成了 App 服務器的 SSL 證書部署,並知足了蘋果 ATS 協議的嚴格要求。