如何評價蘋果公司要求開發者在 2017 年前全部採用「HTTPS」?
蘋果在 WWDC 期間的一次有關安全的 presentation 中提到,所有開發者在 2017 年 1月 1 日前,要開啟 ATS 功能(App Transport Security),它會強制 App 在連接 Web 服務時經過 HTTPS 鏈接而不是 HTTP,以保護用戶數據在傳輸過程中的安全。
外媒原文:Apple will require HTTPS connections for iOS apps by the end of 2016
「During a security presentation at Apple』s Worldwide Developers』 Conference, the company revealed the deadline for all apps in its App Store to switch on an important security feature called App Transport Security — January 1, 2017.App Transport Security, or ATS, is a feature that Apple debuted in iOS 9. When ATS is enabled, it forces an app to connect to web services over an HTTPS connection rather than HTTP, which keeps user data secure while in transit by encrypting it.」
百度被當槍用來ddos攻擊github之後,小米路由劫持http連接在網用戶頁里插廣告之後,某幾款雲輸入法被爆出無視用戶選項明文上傳輸入內容至雲端之後,https的重要性還需要強調么?
=========================
評論中有人希望詳細解釋一下區別,我就班門弄斧一下好了
簡單來講,HTTP做的事情就是把瀏覽器向伺服器發出的獲取頁面的請求和提交的數據(填表或登錄),和伺服器返回的頁面的內容,通過明文的方式進行傳輸,沒有加密,沒有對伺服器和數據的認證。
所以如果有中間人能攔截到通信(不懷好意的路由器、運營商、同一個區域網或者共用一個公共Wi-Fi內的電腦),就可以隨時知道某人瀏覽器正在看什麼網頁,用戶名密碼框里寫了什麼,填表提交的時候姓名住址身份證號裡邊填了什麼,上傳的手持身份證照片等等。同時由於HTTP並不驗證伺服器返回的數據的真實性,因此中間人也可以篡改返回的網頁內容,比如插個廣告,把用戶導向另一個網頁(輸入X寶結果打開了X東),通常這被稱為中間人攻擊(man in the middle attack, MITM)
Man-in-the-middle attack
中間人攻擊_百度百科
小米路由最新固件,開始插入流氓廣告插件,噁心
遇到運營商的 DNS 劫持廣告應該怎麼辦? - 電信運營商
即使中間人不能完全控制通信的通道篡改數據,但是有時間優勢,比如能直接接入用戶所在區域的骨幹網,可以在發現了用戶的請求以後趕在伺服器回復之前搶先回復一個仿冒的網頁給用戶,之後返回的正牌數據會被無視,也可以起到類似的效果,通常稱為旁觀者攻擊(man on the side attack),這部分估計不能說太細,只附上英文維基百科供大家自行鑒賞
Man-on-the-side attack
HTTPS引入了對數據的加密和對數據來源的驗證,通過了會在地址欄里顯示一把綠鎖,在加密演算法和伺服器驗證機制沒被破解的情況下,中間人無法攔截和偽造數據(硬上的話瀏覽器會發出警告)。不過針對HTTPS的攻擊模型也已經出現了,所以HTTPS也不是完美無缺的,只是大幅提高了HTTP的安全性
Google發現法國政府偽造CA證書
谷歌稱CNNIC發布偽造CA證書
通過偽造CA證書,實現SSL中間人攻擊安全和便利某種程度上是對立面,而顯然蘋果更關心前者。
有這樣關心用戶和推動數據傳輸安全的公司是好事,
雖然現在iOS9開發已經默認不允許http請求,但如果不強制要求,開發者永遠會在配置文件里加一行ATS = NO。
在不強制使用 Https 之前,開啟 ATS 肯定會遇到很多資源整合上的困難。
但是統一強制開啟 Https 了這些困難隨著時間也很快不復存在。
難道還有不想和 iOS打交道的公司了
Https 的好處不用再過多闡述
雖然蘋果這一舉措可以算得上霸道,
但依託著它本身強大的影響力,
將會推動整個互聯網行業對於Https的使用。
本來弄個CA證書門檻就不高又便宜…敢不敢再懶一點。
現在iOS9就已經開啟ATS了。不單單是禁止HTTP通訊,如果你的HTTPS伺服器的Cipher Suite不符合要求(加密演算法太落後),也會禁止連接。
從長遠來看這當然是好事,站在用戶角度誰都不希望自己的通訊是HTTP的。最好的解決辦法是升級你的伺服器,趕緊搞個SSL證書。不但你的用戶隱私得到了保障,你自己的網站應用也更加規範了。昨天看 WWDC 視頻[1]的時候就看到這個了,只能說蘋果又要霸道的做一次好事
啟用了強制 ATS 之後,應用網路通訊安全性會大大上升,一大排第三方攻擊從此成為明日黃花,再也不用拿上 iOS 的檯面上來了。
不過要說的是,蘋果這麼做,之後會讓很多應用開發者產生很多煩惱,比如說瀏覽器應用。
蘋果的 ATS 策略是針對整個 App ,不僅僅 NSURLSession 、 NSURLOperation 會受此限制, UIWebView 和 WKWebView 也會受此限制。你說 Chrome 、 Firefox 這種瀏覽器,就算是到了現在在桌面版也只敢提醒用戶訪問的不是 HTTPS 頁面,這 ATS 強制啟用之後,從此 iOS 版的這些瀏覽器就只能瀏覽 HTTPS 頁面了,想必接下來的投訴會滿天飛吧……
當然,對於非瀏覽器的 iOS App,有時候也會面領一些尷尬的情況,比如說你在應用裡面需要插入一個非自家的第三方網址,要是這個網址不支持 HTTPS,那這頁面就沒法展示了。
而對於很多使用第三方服務的 App ,他們之後的更新就只能望著別人第三方啟用 HTTPS 了。(比如說新浪微博,再比如說微信)
我之前就有做一個 App ,開開心心的執行了蘋果的 ATS ,然後在加入微信登錄的時候被迫關閉了 ATS ,當時前端後端忙活了好一陣才把全部內容都配置成 HTTPS ,結果最後因為完全沒法解的微信登錄……只能說好遺憾。
所以在蘋果宣布將在2017年1月1日執行這個政策之後,相信很多 iOS 開發者已經開始著手進行相關切換了,但是完全啟用 ATS ,還需要等到國內的各種第三方服務提供對應支持。至於說需要瀏覽 HTTP 內容的應用,可能就要在審核的時候和 Reviewer 好好糾結一番了。
[1] What"s New in Security
=====體內酒精含量:0.4%=====講一個悲哀的事情,在我之前作為一個項目的顧問去建議項目架構師在系統中全局啟用 HTTPS 通訊,然後他們的 PHP 工程師和架構師一起告訴我說他們當時的 GET 請求加上 Sign 驗證已經足夠了,完全沒有啟用 HTTPS 的必要,最後還說啟用了 SSL 之後,伺服器開銷會比現在高很多,反正就是一排理由,最後也沒有啟用 SSL 。
再講一個更悲哀的事情,昨天當我把蘋果這個政策發到一個開發群裡面的時候,大部分開發者第一時間的反映並不是高興,而是深深的煩惱、厭惡。
唉……隱私啊,安全啊,這些東西,雖然現在被蘋果拽著走了一大步,但以後會不會有人想出什麼方法來繞過去(比如說在 Xcode 驗證 ATS 的情況下只用低等級 SDK 開發),就很難說了。
如果一直放任開發者在Info.plist里加幾行,就可以無視ATS,那麼https永遠也不會普及,永遠都只是個可選項而已。
ATS成為必須之後,也會推動各類Web API的https化。
只是好奇像chrome或firefox們,對於http連接是否就只能走自己的代理了,safari可以由蘋果開後門,如果蘋果願意。
這是一個良心企業推動整個安全領域產業的升級!
沒有HTTPS來安全保護的APP,就如同光著屁股在大街上行走,誰想看隱私,只要走到你的身邊,就可以瞄你幾眼。
而有了HTTPS就如同穿的很體面走在大街上,即使你很吸引人,也最多回頭看你幾眼,即使有人拿著透視眼鏡來掃描你(中間人的攻擊),如果你的防護好,也不過看看輪廓,即使防護不好,最核心的隱私也不會泄漏!這是一件非常好的事情,網路安全確實需要這樣有話語權的航母級的企業來推動,這也體現了蘋果的企業責任感。蘋果曾經靠一己之力淘汰了 Flash,我也希望蘋果這一次能夠大力推動 https 協議的普及。
其實現在使用免費的 Let"s Encrypt 很容易就能實現 https 協議支持並且定期更新,新版本的證書獲取簡直就是傻瓜式的,更新也只是一句 crontab。
遺憾的是,雖然我們早早的就想在全站採用 https,無奈很多頁面嵌入了國內視頻網站的內容(作為獨立遊戲媒體平台少不了要放視頻),而現在這些視頻網站幾乎都沒有 https 的嵌入代碼,造成 https 協議下無法顯示視頻。我們沒有知乎這樣的氣魄直接放棄視頻在頁面內的播放,所以現在還只能嘗試在 App 數據介面方面採用 https 協議。
真的令人感到喪氣!有這樣一個大公司來推動業界對安全的重視是非常好的事情。
2017年1月1日以後,所有iOS需要訪問網頁的 App 都要面臨一個問題:ATS(App Transport Security)。由於 ATS 要求 HTTPS 訪問,換句話來說,還有 13 天,蘋果就要對 APP 開發者們關閉 HTTP 的大門了。
著重從實操的角度回答一下,開發者如何配置SSL證書和HTTPS協議以滿足蘋果的要求。
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 頒布的證書,後續似乎會開放更多證書廠商的產品。
接下來,需要填寫一些申請信息,最重要的是綁定域名。假如你的域名的 http://abc.com,需要填寫的必須是類似 http://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 證書安裝
將域名 http://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,就可以使Domain Name Registration and Web Hosting 來訪問了。
4. CDN 上部署 HTTPS
很多網站都會使用 CDN 服務,因為雲廠商一般有提供一些免費的 CDN 流量額度,比如騰訊雲就有 60GB 的免費流量。
對於使用了 CDN 的 App 或網站,還可以將 HTTPS 部署在全網 CDN 節點,實現全網數據加密傳輸功能。
4.1 配置 HTTPS 的條件:- 域名管理頁面,域名的狀態為 部署中 或 已啟動。
- 域名不是由 COS 同步而來的 .http://file.myqcloud.com 後綴域名。
- 域名的接入方式為 自有源 或者 COS源、FTP源。
登錄CDN控制台,進入 【域名管理】 頁面,點擊域名右側 管理 按鈕,進入管理頁面:
在 【高級配置】中找到 HTTPS 配置模塊
4.2 證書類型
騰訊雲 CDN 目前支持兩種方式部署證書:
- 自有證書:將自有證書、私鑰內容上傳至 CDN 進行部署,全程加密傳輸,證書不落地,保障您的證書安全。
- 騰訊雲託管證書:也就是上面咱們已經申請成功的 SSL 證書。
4.3 證書配置
前往CDN高級工具-證書管理界面,
根據情況選擇希望配置證書的域名、證書類型和回源方式即可。這裡需要滿足前面提到的這個條件:域名的狀態為 部署中 或 已啟動。
勾選「騰訊託管證書」後,可以在證書列表下拉菜單中找到剛才申請到的證書。回源方式選擇為 HTTPS,之後提交即可。
證書配置成功後,會出現 強制跳轉 開關,開啟後,即使用戶發起 HTTP 請求,也會強制跳轉為 HTTPS進行訪問。
4.4 檢測部署效果
完成上面一系列的操作之後,還需要最後確認部署的 SSL 證書是否符合 ATS 要求。否則,折騰了那麼久,最終卻是做了無用功的話,那是非常痛苦的一件事。
對此,雲廠商也是提供了較為方便的檢測方式,只需要輸入目標域名即可一鍵檢測。
至此,就完成了 App 伺服器的 SSL 證書部署,並滿足了蘋果 ATS 協議的嚴格要求。
本文首發騰雲閣:還有 13 天,蘋果就要關上 HTTP 大門了
坐等一堆渣公司上線一坨自簽署證書
另外我不懂iOS開發,那這是不是TCP都不讓用了?還是說TCP也只能用TLS了?嘗試從技術的角度回答一下吧
強制開啟https是為了通訊更加安全,這肯定是沒錯的。強制鏈接開啟https依賴於 ATS 要回答這個問題 需要了解如下三點:
一 什麼是ATS? 它有什麼用?
二 ATS 如何工作的?
三 開啟與關閉 ATS 會對程序有什麼影響?
首先 ATS 是App Transport Security的縮寫 是 iOS9 與OSX 10.11中引入的新的系統安全特性 用來保護用戶數據在傳輸過程中數據安全 換言之 開啟ATS後 系統保證你的數據傳輸鏈路是安全的
ATS 的技術細節蘋果公開的並不多 但通過一些通訊案例的返回信息 可以大膽的猜測他的技術手段 以 OSX 10.11為例 代碼編譯後 是默認開啟ATS的 這個時候 代碼訪問 http 是木有問題的 使用 charles 嘗試抓http包 一點問題沒有 但抓取 https 數據包會出現握手錯誤 中間人攻擊失敗 從返回的信息看 可能是驗證伺服器證書時 驗證是否有效 依賴本地極少的幾個 root ca。
ATS 可以通過配置 plist 強制關閉 關閉後 charles 嘗試抓https包 可以正常返回所有數據 中間人攻擊成功 對於破解人員來說 可以手動修改bundle程序包關閉ATS OSX 平台上的程序如果不加入其他防護措施 ATS就如同虛設 因此 不允許關閉 ATS才是關鍵的 強制鏈接全部開啟https 猜測是不允許關閉ATS了
最後說說ATS與自簽名驗證 這種情況下 配置好證書鏈是關鍵 還有 ssl pinning 一定要開啟 這樣配置後 可以很大程度上抵擋MITM中間人攻擊 但不要過多的依賴系統框架庫 因為底層的ssl pinning 是可以hook繞過的 與iOS 和安卓一樣一樣的
總結 蘋果為了系統與平台軟體安全 的確做出了許多 但考慮到現實環境的原因 實際實施會如何 效果還很難說大道理不想說 成都多數公司服務端開發人員系北大青鳥狼窩培訓班出身 .https是什麼 證書是什麼 混口飯吃不容易。
補充回答調侃的核心是 多數創業公司app靠畫幾個界面就能拿錢了 server靠crud就能拿錢了 加個安全相關的硬性規定 又會上演很多離奇搞笑的話劇
好吧 只是調侃一下培訓班 要不要這麼激動啊
社會主義初級階段,HTTPS不普及怎麼辦?
ios會不會產生社會主義初級階段版,看著ios加入的新功能居然是騷擾電話提醒等功能,真覺得Cook的產品越來越不cool。非常感謝邀請作答,平時不怎麼看知乎,偶爾才來逛一下…剛剛才看到所以回答的略晚了一些請見諒。
對於各個公司而言,這無非就是做、或者被逼著做而已,國內對於網路安全的重視性普遍來講都是極差的,很多銀行的在線系統,都存在著SSL證書的不安全提示,無非就是為了節省開支自授權,甲方也在不了解也不重視的前提下,乙方當然能省則省,對於銀行這種安全度要求極高的企業尚且如此的能省則省,其他的就更可見一斑了,強制開啟ATS對於安全的重要性,大家說的已經很多了,此處不多贅述,講點其他的。
自移動互聯網興起,眾多企業乘其風,破舊浪,爭先恐後湧入行業,甚至能從無到有,創業成巨頭者屢見不鮮,當然這些都已成往事,關於移動互聯網是否還是創業者們的寵兒我們容後再談,但是可以看出的是,由於蘋果諸如強制ATS等方面的強勢影響,移動互聯網將從備受追捧的熱門寵兒,變成為能夠影響、甚至引領互聯網行業的「先行者」,不論你是大家大業,還是新興創業,只要你已經涉及了移動這塊地盤,只要蘋果說強制變,安卓、WEB、甚至PC都會收到影響,之前的熱潮讓移動互聯網無孔不入的攻入了各種各樣大大小小的公司,現如今可謂蘋果吼一吼,互聯網行業抖三抖,https的事情,如果蘋果不說強制,國內不知道多少互聯網企業還要混多久才會想起來,直到吃一個大虧後才會如夢方醒,也就是所謂的摸著石頭過河。
而今後的路,蘋果明顯不希望各位繼續自己摸著石頭走,強制使用https本身並不會有太大的影響,或者說「強制」的腳步其實早已悄無聲息的開始,只是開始的時候由於巨大的機遇,跟隨者們不惜花費大量成本跟著蘋果走,說的危言聳聽一些,這並沒有結束,繼續跟下去就付出更多代價,這會逐漸的影響大家跟隨蘋果的步伐,或許不遠的將來就會迎來因為各種各樣原因開始的行業洗牌。大家開始懷疑移動互聯網成本與成果,開始追捧其他熱門,甚至開始退出,但是目前移動互聯網已經是舉足輕重的位置,大部分的公司它割不掉,放不下,作為從業者,也只希望蘋果越走越好,路越帶越正。蘋果延期了:
Supporting App Transport Security
HTTPS是很好,但是CDN怎麼辦?要把網站證書的私鑰提供給CDN嗎?國內有沒有keyless CDN?
另外,HTTPS解決不了DNS劫持的問題,如果蘋果能提供HTTPDNS服務,並要求開發者強制使用HTTPDNS,那豈不是更好?見鏈接:https://www.zhihu.com/question/47526010強烈同意!!我這一帶ISP一直在劫持HTTP包投放廣告,經常導致應用錯誤。終於可以解決了!
好!
這裡反對的意見似乎只有 @Gee Law 吧。我針對他的回答來反駁一下好了。
直接拿出Android來對比就好了。整個Android,在不用ndk的情況下跑的都是Java虛擬機,用巨大的資源浪費換來的僅僅是開發難度降低一點。這不是因噎廢食,殺雞用牛刀嗎?
你網路連接的時候額外的計算量,能比得上Android就算不連網的時候,也要付出額外的計算量嗎?
你我這樣的人如果去設計一個app,自然不會有https/http用錯的困擾。但是問題是,你自己日常生活中被迫使用到的程序,幾乎一定是不如你的人寫的。而且,越是被迫要用的程序,就越可能來自壟斷公司,他們的水平就越差……-_-
問題是 HTTPS 的性能問題怎麼解決?
這是個偽命題。
只能改善性能,而不能解決性能問題。
還有,要是CDN 也要求 https 的話
小公司就直接完蛋了
蘋果一項是注重數據安全的,推動https確實能解決一些安全問題,但是目前https的效率相對http來說大打折扣,這就會增加業內的伺服器部署成本。也許會推動業界技術思考,研發出來一個既有http的效率又有https安全性的新的交互協議,也未可知。反正對於用戶來說是個好事。
推薦閱讀:
※在微軟 (Microsoft) 公司從事 iOS / OS X 開發是怎樣一番工作體驗?
※iMessage 是怎麼做到顯示「已讀」功能的?
※用HTML5開發App真的好嘛?
※個人開發者的應用被同步推、PP 助手、快用蘋果助手、91 助手、iTools 之類的市場盜版了該怎麼辦?
※用 OmniGraffle 來做應用 Mockup 模型的體驗如何,效率高嗎?
TAG:蘋果公司AppleInc | 網路安全 | iOS開發 | HTTPS | WWDC2016 |