開發Mobile App有時也要跟Web互動溝通,此時就會接觸到HTTP與HTTPS,一直沒有深入瞭解其中的關係,只知道是有沒有加密的差別,但其實裡頭學問可多的呢!iOS 10即將到來,Apple又針對ATS (App Transport Security)有更嚴謹的規定,我想就趁這個時候來徹底了解一下吧!
所謂HTTPS:
HTTPS=HTTP+加密+認證+完整性保護
上面這個公式,正好可以對應解決HTTP的弊端!
個別解釋上述四個項目:
HTTP
HTTPS並非新的應用層協議,而是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)協議代替。用HTTP的時候,HTTP直接和TCP通信,用SSL的時候,HTTP就會先和SSL通信,然後SSL再和TCP通信。簡而言之,HTTPS就是套了SSL協議外殼的HTTP
加密
HTTP加密傳輸一般使用共享密鑰加密,這是一種對稱加密方法也就是說,發送方和接收方使用同一套密鑰。這樣存在的問題是,密鑰在傳輸過程中可能被竊取。
HTTPS採用的是公開密鑰加密的處理方式。這是一種不對稱的加密方式,就是說,發送方用對方的公開密鑰加密,當信息傳遞到對方的時候,對方用自己的私有密鑰解密,這樣就不涉及傳輸密鑰的安全問題。公開密鑰可以隨意傳輸,私有密鑰只有自己知道。
認證
HTTP協議無法確定通信方,但是SSL可以。它擁有一種叫做證書的手段,可用於確定方。另外偽造證書想當困難,所以只要能夠確定通信方持有證書,就可以判斷通信方的真正意圖。
證書由值得信賴的第三方機構頒發,用以證明服務器端和客戶端是真實存在的。
完整性保護
應用層在發送數據時,會附加一種叫做MAC(Message Authentication Code)的報文摘要。MAC能夠查知報文是否遭到篡改,從而保護報文的完整性。
—
HTTPS是身披SSL外殼的HTTP
通常,HTTP直接和TCP通信。當使用SSL時,則演變成先和SSL通信,再由SSL和TCP通信了。簡言之,所謂HTTPS,其實就是身披SSL協議這層外殼的HTTP。
SSL是獨立於HTTP的協議,所以不光是HTTP協議,其他運行在應用層的SMTP和Telnet等協議均可配合SSL(Secure Socket Layer)協議使用。可以說SSL是當今世界上應用最為廣泛的網絡安全技術。
HTTPS當然也有些問題
當HTTP使用SSL的時候,處理速度會變慢,一般HTTPS比HTTP慢2到100倍。
- 因為多了HTTP和SSL及TCP的通信
- 因為HTTPS要處理客戶端和服務器之間的加密解密,完整性,證書認證等驗證。這也將消耗CPU和內存等硬件資源
由此看來在一些情況下不用HTTPS的原因也是顯而易見了。因為HTTPS的處理速度會變慢,因為對硬件的消耗,對訪問量很大的web網站而言,其承擔的負載不容小覷。除此之外,節約購買數字證書的成本也是原因之一。所以,一般非敏感性信息還是會用http通信,敏感性的信息才會用https通信。
針對SSL速度慢的情況,沒有根本的解決方案,一般會使用SSL加速器這種(專用服務器)硬件來改善問題。
—
有了圖解來分辨HTTP和HTTPS的差異就顯而易見!日本人寫的書由中國人來翻譯,看了博主大大的筆記後,讓我更容易記住兩者的特性!
參考:
隨意留個言吧:)~