什么是Https------------Http安全版(http下加入SSL層)就是HTTP的安全升級版
Http協議的客戶端和服務端通信采用的是明文(post請求也只是將數據放在header中,但依然是明文傳輸。而Hppts協議的客戶端和服務端間通信采用的秘文傳輸(對稱加密和非對稱加密相結合)
Https的作用:內容加密建立一個信息安全通道,來保證數據傳輸的安全;身份認證確認網站的真實性;數據完整性防止內容被第三方冒充或者篡改
Https的劣勢:對數據進行加解密決定了它比http慢;需要進行非對稱的加解密,且需要三次握手。首次連接比較慢點,當然現在也有很多的優化。出于安全考慮,瀏覽器不會在本地保存HTTPS緩存。實際上,只要在HTTP頭中使用特定命令,HTTPS是可以緩存的。
Firefox默認只在內存中緩存HTTPS。
但是,只要頭命令中有Cache-Control: Public,緩存就會被寫到硬盤上。
IE只要http頭允許就可以緩存https內容,緩存策略與是否使用HTTPS協議無關。
HTTPS和HTTP的區別(http是明文傳輸,端口:80,https是加密傳輸,端口:443)
https協議需要到CA申請證書。
http是超文本傳輸協議,信息是明文傳輸;https 則是具有安全性的ssl加密傳輸協議。
http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
http默認使用80端口,https默認使用443端口
網絡基礎的同學都知道,HTTP是應用層協議,位于HTTP協議之下是傳輸協議TCP。TCP負責傳輸,HTTP則定義了數據如何進行包裝。
傳輸加密的流程:原先是應用層將數據直接給到TCP進行傳輸,現在改成應用層將數據給到TLS/SSL,將數據加密后,再給到TCP進行傳輸。
HTTPS是如何加密數據的:
握手認證:客戶端一次請求-——-服務端返回數字證書—————客戶端生成對稱密匙
客戶端發起一次請求后,服務端返回數字證書,客戶端接受到后,生成一個對稱密鑰,再用服務器下發證書中的公鑰對其加密并發送,服務端接受到客戶端發送的加密后的對稱密鑰后用自己的私鑰解密,獲得對稱密鑰。到此服務端和客戶端都擁有了可以用來加密數據的對稱密鑰,并且可以保證該密鑰沒有泄漏。
傳輸階段————客戶端和服務端用上面得到的對稱密鑰將數據加密后正常傳輸。
數字簽名與摘要
簡單的來說,“摘要”就是對傳輸的內容,通過hash算法計算出一段固定長度的串(是不是聯想到了文章摘要)。然后,在通過CA的私鑰對這段摘要進行加密,加密后得到的結果就是“數字簽名”。(這里提到CA的私鑰,后面再進行介紹)
明文 -->hash運算--> 摘要 --> 私鑰加密 --> 數字簽名
結合上面內容,我們知道,這段數字簽名只有CA的公鑰才能夠解密。
接下來,我們再來看看神秘的“證書”究竟包含了什么內容,然后就大致猜到是如何對非法證書進行預防的了。
HTTPS其實是有兩部分組成:HTTP +SSL/ TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密后的數據。具體是如何進行加密,解密,驗證的,且看下圖。
1. 客戶端發起HTTPS請求—————瀏覽器里輸入一個https網址,然后連接到server的443端口
2. 服務端的配置
采用HTTPS協議的服務器必須要有一套數字證書,可以自己制作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面(startssl就是個不錯的選擇,有1年的免費服務)。這套證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然后發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
4. 客戶端解析證書————————先驗證證書,沒問題的話生成隨機值,用證書加密
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那么就生成一個隨即值。然后用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5. 傳送加密信息——————其實是證書加密后的隨機值
這部分傳送的是用證書加密后的隨機值,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6. 服務端解密信息
服務端用私鑰解密后,得到了客戶端傳過來的隨機值(私鑰),然后把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠復雜,數據就夠安全。
7. 傳輸加密后的信息————————私鑰加密
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原
8. 客戶端解密信息-——————私鑰解密得到內容
客戶端用之前生成的私鑰解密服務段傳過來的信息,于是獲取了解密后的內容。整個過程第三方即使監聽到了數據,也束手無策。