歡迎光臨
每天分享高質量文章

為什麼 HTTP 有時候比 HTTPS 好?

做為一家安全公司,我們在站點Stormpath上經常被開發者問到的是有關安全方面最優做法的問題。其中一個被經常問到的問題是:


我是否應當在站點上執行HTTPS?


很不幸,查遍整個因特網,你大多數情況下會得到同樣的建議:加密所有的東西!對所有站點進行SSL加密等等!然而,現實情況表明這通常不是一個好的建議。


許多情況下使用HTTP比使用HTTPS要好很多。事實上,HTTP是一個在效能上和可用性上比HTTPS更好的一種協議,這也就是我們經常推薦客戶使用HTTP的原因。下麵我們說一說我們的理由……


使用 HTTPS 會出現的問題


HTTPS 是一個錯漏百出的協議. 此協議及其現今流行的實現中許許多多眾所周知的問題使得它不適用於許多各種各樣的web服務。


HTTPS 十分緩慢



應用 HTTPS 的主要阻礙之一就是 HTTPS 協議十分緩慢的這一事實。


就其特性而言,HTTPS 就是在兩端之間進行安全的加密通訊。這需要兩端都持續耗費寶貴的CPU時間週期:


●一開始說“hello”就決定使用哪種型別的加密方式 (暗號方案套件)


●驗證SSL證書


●為每一個請求的驗證以及對請求/回應的驗證核實,執行加密程式碼


而這聽起來不是特別形象,其實就是加密程式碼執行的是CPU密集型的操作。它會重度使用浮點運算的CPU暫存器,會徵用你的CPU從而使得請求的處理變慢。


這裡有一個內容十分豐富的 ServerFault 執行緒,展示了在使用代用 Apache2 的一個 Ubuntu 伺服器時,相比之下的處理速度你所能預計會有多大的降低:http://serverfault.com/questions/43692/how-much-of-a-performance-hit-for-https-vs-http-for-apache。


如下是結果:



即使是像上面所展示的一個非常簡單的示例,HTTPS也能將你的Web伺服器的速度拖慢超過40倍! 這可拖了web效能很大的後腿.


在今天的環境中, 將你的應用程式作為 REST API 的一個組成部分來構建是很普遍的 — 使用 HTTPS 確實是會拖慢你的網站、影響你的應用程式效能並給你的伺服器CPU帶來不必要的衝擊的一種方式,而且通常會惹惱你的使用者。


對於許多對速度敏感的應用程式而言,使用原始的 HTTP 常常要好很多。


HTTPS 不是一個放之四海而皆準的安全保障



許多人都會抱有 HTTPS 會讓他們的站點更安全,這樣一種印象。這其實不是真的。


HTTPS 只是對你和伺服器之間的流量進行了加密 — 一旦HTTPS資訊的傳輸中斷了,一切就又都是一場公平的遊戲。


這意味著如果你的計算機已經感染的了惡意軟體,或者你已經被受到欺騙運行了某些惡意軟體 — 這個世界上所有的HTTPS對於你而言也都無能為力了。


此外,如果 HTTPS 伺服器上存在任何的漏洞,某些攻擊者就能夠簡單的等到 HTTPS 已經處理結束,然後再在其它的層(例如 web 服務這一層)抓取到不管什麼資料。


SSL 證書本身也經常被濫用。比如,其在瀏覽器上的處理方式就很容易發生錯誤:


  • 每種瀏覽器(Mozilla,google 等)都是獨立審計並核准根證書提供商來保證他們安全地處理SSL證書

  • 一旦核准透過,這些根 SSL 證書就會被新增到瀏覽器的可信證書串列,這意味任何由根證書提供商簽名的證書都是預設可信的。

  • 這些提供商因此可隨意亂搞,導致各類安全問題頻發,比如2011年發生的 DigiNostar 事件。


以上種種,著名證書授權機構錯誤地簽名了大量的偽造和欺詐的證書,直接損害數以萬計的Mozilla使用者的安全。


而 HTTP 並沒有提供任何形式的加密服務,至少你知道你正在處理什麼東西。


HTTPS流量很容易被監聽


如果你正在構建一個需要被不安全的裝置(比如移動 app)使用的 web 服務,你可能覺得因為你的服務執行於 HTTPS 上,通訊就不會被監聽了。


如果真這麼想的話,你就錯了。


其他人可以輕鬆地在電腦上設定代理來截獲並檢視HTTPS流量,也就越過了SSL證書檢查,這就直接洩漏了你的私人資訊。


這篇博文就演示了移動裝置上的 https 訊息監聽。


你覺得沒多大事?別做夢了!就連Uber這種大公司的移動應用都被逆向了,它們也用了 HTTPS。如果你灰心了,我勸你還是別看這篇文章了。


好了,接受現實吧,不管你怎麼做,攻擊者都能用這樣或那樣的方法來監聽你的網路流量。與其把時間浪費在修複 SSL 的問題上,還不如花點時間想想如何明智地使用 HTTP 吧。


HTTPS 有漏洞


大家都知道 HTTPS 並不是鐵板一塊。多年來 HTTPS 被曝出了不少漏洞:


  • POODLE (pdf)

  • BEAST

  • CRIME

  • Heartbleed


以後的攻擊會越來越多。再加上 NSA 為瞭解密,正不遺餘力地收集著 SSL 流量——使用 HTTPS 似乎一點用處都沒有,因為不定什麼時候你的 HTTPS 流量就會被一覽無餘。


HTTPS 太貴


最後要說的一點是 HTTPS 太貴了。你需要從根證書頒發機構購買瀏覽器和客戶端能夠識別的 SSL 證書。


這可不便宜啊。


SSL證書年費從幾美刀到幾千不等——如果你正在構建基於多個微服務(multiple microservices)的分散式應用,你需要買的證書可不只一個。

對於小專案或預算緊張的人來說成本一下子就抬高了不少。


為什麼 HTTP 是一個不錯的選擇


在另一方面,讓我們稍稍不那麼消極片刻,而是專註於積極的東西 : 是什麼使得HTTP很棒的。大多數開發者並不欣賞它的好處。


正確條件下的安全


當然HTTP本身沒有提供任何安全性,透過正確的設定你的基礎設施和網路,你可以避免幾乎所有的安全問題。


首先,對於所有的你可能會用到的內部HTTP服務, 要確保你的網路是私有的,不能從公共的外部環境嗅探到資料包. 這意味著你將可能徐昂要將你的HTTP服務部署在一個像Amazon EC2這樣的非常安全的網路裡面.


透過在 EC2 部署公共的雲伺服器,就能保證你擁有一流的網路安全, 防止任何其他的AWS使用者嗅探到你的網路流量.


使用 HTTP 的不安全性來擴充套件


人們過多的關註於 HTTP 缺乏安全和加密特點的時候,許多人沒有想到的是,這種協議可以提供很好的擴充套件性。


大部分現代的Web應用程式透過佇列來擴充套件。


你有一個Web伺服器接受請求,然後用處在相同網路上的伺服器叢集執行單獨的jobs來處理更多的CPU和記憶體密集型任務。


為了處理任務的排隊,人們通常使用一個諸如 RabbitMQ or Redis 這樣的系統。兩個都是不錯的選擇,但是否可以除了你的網路外不使用任何基礎設施元件而獲得任務佇列的好處呢?


使用HTTP,你可以!


它是這樣工作的:


  • 建立Web伺服器和所有處理伺服器共享子網的一個網路。

  • 讓你的處理伺服器偵聽網路上的所有資料包,和被動嗅探網路流量。

  • 當Web伺服器收到HTTP流量,那些處理伺服器可以簡單地讀取進來的請求(純文字,因為HTTP不加密),並立即開始處理工作!


上述系統的工作原理就像一個分散式佇列,快速,高效,簡單。


使用 HTTPS,上述情況是不可能的,但是,透過使用 HTTP,可以大大加快您的應用程式同時去除(不必要的)基礎設施–這是一個大的勝利。


不安全和自負


最後一個我建議使用HTTP而不是HTTPS的原因:不安全。


是的,HTTP 沒有給你的使用者提供安全,但是,安全真的有必要嗎?


不僅大部分 ISP 監控網路通訊,過去數年的很長一段時間裡,很明顯的是政府已經儲存並解密了大量網路通訊。


使用 HTTPS 的顧慮正好比將一個掛鎖來放在一尺高的籬笆上,大致來說,你不可能保證應用的安全。所以,何必這麼麻煩呢?


開發僅依靠 HTTP 的服務,這並沒有給你的使用者一種安全的錯覺,或者欺騙使用者認為自身很安全。事實上,他們很有可能認為是不安全的,


開發基於 HTTP 的程式,你的生活將得到簡化,並增強和你使用者的透明。


考慮一下吧。


在逗你玩呢 !! >:)


愚人節快樂哦 !


我喜歡你不會真的任務我會建議你不去使用HTTPs ! 我想要非常明確的告訴你 : 如果你要構建任何什麼型別的web應用, 要使用 HTTPS 哦!


你要構建什麼型別的應用程式或者服務並不重要,而如果它沒有用到HTTPS,你就做錯了.


現在,讓我們來聊聊HTTPS為什麼很棒.


HTTPS 是安全的



HTTPS 是一個業績優良的很棒的協議. 雖然這些年來有過幾次針對其漏洞的利用事件發生, 但它們一直都是相對較為輕微的問題,而且也很快被修複了.


而誠然,NSA確實在某個陰暗的角落收集著SSL流量, 但他們能夠解密即使是很少量SSL流量的可能性都是極小的 — 這會需要快速的,功能齊全的量子計算機,並耗費數量驚人的鈔票. 這玩意存在的可能性貌似不存在,因此你可以高枕無憂了,因為你知道你的站點上的SSL確實在為你的使用者資料傳輸保駕護航.


HTTPS 速度是快的


上面我曾提到HTTPS“遭罪似的慢” , 但事實則幾乎完全相反.


HTTPS 確實需要更多的CPU來中斷 SSL 連線 — 這需要的處理能力對於現代計算機而言是小菜一碟了. 你會遇到SSL效能瓶頸的可能性完全為0.


目前你更有可能在你的應用程式或者web伺服器效能上遇到瓶頸.


HTTPS 是一個重要的保障


雖然 HTTPS 並不放之四海而皆準的web安全方案,但是沒有它你就不能以策萬全.


所有的web安全都倚賴你擁有了 HTTPS. 如果你沒有它, 那麼不管你對你的密碼做了多強的雜湊加密,或者做了多少資料加密,攻擊者都可以簡單的模擬一個客戶端的網路連線,讀取它們的安全憑證——然後轟的一聲——你的安全小把戲結束了.


因此 — 雖然你不能有賴於HTTPS解決所有的安全問題,你絕對100%需要將其應用於你構建的所有服務上 — 否則完全沒有任何辦法保證你的應用程式的安全.


此外,雖然證書簽名很顯然不是一個完美的實踐,但每一種瀏覽器廠商針對認證機構都有相當嚴格和嚴謹的規則. 要成為一個受到信任的認證機構是非常難的,而且要保持自己良好的信譽也同樣是困難的.


Mozilla (以及其其他廠商) 在將不良根認證機構踢出局這項工作方面表現相當出色,而且一般也真正是網際網路安全的好管家.


HTTPS 流量攔截是可以避免的


先前我提到過,可以很容易的透過建立屬於你自己的SSL證書、信任它們,從而在SSL通訊的中途攔截到流量.


雖然這絕對有可能,但也很容易可以透過 SSL 證書鋼釘 來避免 .


本質上講,依照上面連結的文章中給出的準則, 你可以是的你的客戶只去信任真正可用的SSL證書,有效的阻擋所有型別的SSL MITM攻擊,甚至在它們開始之前 =)


如果你是要把SSL服務部署到一個不受信任的位置(像是一個移動或者桌面應用), 你最應該考慮使用SSL證書鋼釘.


HTTPS(再也)不貴了


雖然歷史上HTTPS曾經昂貴過,而這是事實 — 但再也不是這樣了. 如今你能夠從許許多多的web主機那裡買到非常便宜的SSL證書.


此外, EFF (電子前沿基金會) 正要推出一個完全免費的 SSL 證書提供機構: https://letsencrypt.org/


它會在 2015 推出, 並必然將改變所有web開發者的遊戲規則. 一旦讓加密的方案上線,你就能夠對你的網站和服務進行100%的加密,完全沒有任何花費.


請一定要訪問他們的網站,並訂閱更新哦!


HTTP 在私有網路上並不是安全的


早些時候,我談到HTTP的安全性怎麼是不重要的,特別是如果你的網路被鎖上(這裡的意思是切斷了同公共網路的聯絡) — 我是在騙你。


而網路安全是重要的,傳輸的加密也是!


如果一個攻擊者獲得了對你的任何內部服務的訪問許可權,所有的HTTP流量都將會被攔截和解讀, 不管你的網路可能會有多“安全”. 這很不妙哦。


這就是為什麼 HTTPS 不管是在公共網路還是私有網路都極其重要的原因。


額外的資訊: 如果你是吧服務部署在AWS上面,就不要想讓你的網路流量是私有的了! AWS 網路就是公共的,這意味著其它的AWS使用者都潛在的能夠嗅探到你的網路流量 — 要非常小心了。


我早些時候有提到,HTTP可以用來代替佇列,是的,我沒說錯,但這是一個很可怕的主意!


由於安全原因,放大服務的規模,是一個很可怕的,糟糕的註意。請不要這麼做。


(除非這是一個概念證據,只為了造一個很酷的演示產品而已)


總結


如果你正在做網頁服務,毫無疑問,你應該使用HTTPS。


它很容易、廉價,且能獲得使用者信任,沒有理由不用它。作為碼農,我們必須要承擔起保護使用者的重任,要做到那點,方法之一就是強制使用HTTPS、


希望你喜歡這篇文章,供君一樂。

來自:開源中國社群

連結:http://www.oschina.net/translate/why-http-is-sometimes-better-than-https


贊(0)

分享創造快樂