在學習HTTPS加密方式以前,有必要了解幾種常見的加密方式,如:算法
須要對加密和解密使用相同密鑰的加密算法。所謂對稱,就是採用這種加密方法的雙方使用方式用一樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規則,規定如何進行加密和解密。
注意:對稱加密也叫密鑰加密瀏覽器
採用單鑰密碼系統的加密方法,同一個密鑰能夠同時用做信息的加密和解密,這種加密方法稱爲對稱加密,也稱爲單密鑰加密。安全
優勢:對稱加密算法的優勢是算法公開、計算量小、加密速度快、加密效率高。
缺點:對稱加密,密鑰管理的安全性很低,由於加密和解密都使用同一個密鑰,在密鑰的發送過程當中,密鑰可能被第三方截取,致使第三方也能夠破解密文。服務器
在每次發送真實數據以前,服務器先生成一把密鑰,而後先把密鑰傳輸給客戶端。以後服務器給客戶端發送真實數據的時候,會用這把密鑰對數據進行加密,客戶端收到加密數據以後,用剛纔收到的密鑰進行解密。學習
咱們以客戶端發送請求給服務器爲例:
對稱加密在第一部和第二部上都可被第三者攔截(實時是第二步通常都可以被攔截,可是可否解密仍是要看第一步是否把密鑰攔截下來)
由於,對稱加密的解密鑰匙和加密鑰匙均是同一把。網站
非對稱加密算法須要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,若是用公鑰對數據進行加密,只有用對應的私鑰才能解密。若是用公鑰對數據進行加密,只有用對應的私鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。加密
公鑰與私鑰是一對。傳輸雙方均有本身的一對密鑰(也就是雙方每方均有:公、私密鑰一把,雙方加起來共4把)spa
例子:傳輸雙方好比是甲乙雙方,甲方有配對的公、私密鑰一對,且公鑰負責加密,私鑰負責解對應的公鑰加的密。乙方同理。圖片
非對稱密鑰的算法強度複雜(是優勢也是缺點),安全性依賴於算法與密鑰。
優勢:安全性較高,比對稱密鑰安全性高不少。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的須要。
缺點:因爲其算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。資源
1.客戶端要向服務器發送信息,客戶端和服務器都要產生一對用於加密和解密的公鑰和私鑰。
2.客戶端的私鑰保密,客戶端的公鑰告訴服務器;服務器的私鑰保密,服務器的公鑰告訴客戶端。
3.客戶端要給服務器發送信息時,客戶端用服務器的公鑰加密信息,由於服務器的公鑰是公開的,客戶端能夠獲得。
4.客戶端將這個消息發給服務器(已經用服務器的公鑰加密消息)。
5.服務器收到這個消息後,服務器用本身的私鑰解密客戶端的消息。其餘全部收到這個報文的人都沒法解密,由於只有服務器纔有服務器的私鑰。
HTTPS採用的是處理信息的方式是:結合對稱加密+非對稱加密這兩種方式,咱們能夠用非對稱加密的方式來傳輸對稱加密過程當中的密鑰,以後咱們就能夠採起對稱加密的方式來傳輸數據了。具體是這樣子的:
服務器用明文的方式給客戶端發送本身的公鑰,客戶端收到公鑰以後,會生成一把密鑰(對稱加密用的),而後用服務器的公鑰對這把密鑰進行加密,以後再把密鑰傳輸給服務器,服務器收到以後進行解密,最後服務器就能夠安全獲得這把密鑰了,而客戶端也有一樣一把密鑰,他們就能夠進行對稱加密了。
事實上,在沒有引入證書以前,非對稱加密也並不是傳輸安全的,在此舉個例子:
服務器以明文的方式給客戶端傳輸公鑰的時候,中間人截取了這把屬於服務器的公鑰,而且把中間人本身的公鑰冒充服務器的公鑰傳輸給了客戶端。
以後客戶端就會用中間人的公鑰來加密本身生成的密鑰。而後把被加密的密鑰傳輸給服務器,這個時候中間人又把密鑰給截取了,中間人用本身的私鑰對這把被加密的密鑰進行解密,解密後中間人就能夠得到這把密鑰了。
最後中間人再對這把密鑰用剛纔服務器的公鑰進行加密,再發給服務器。
毫無疑問,在這個過程當中,中間人獲取了對稱加密中的密鑰,在以後服務器和客戶端的對稱加密傳輸中,這些加密的數據對中間人來講,和明文沒啥區別。
非對稱性加密之因此不安全,是應爲客戶端不知道,這把公鑰是否是服務器的。所以,咱們須要找到一種策略來證實這把公鑰就是服務器的,而不是別人冒充的。解決這個問題的方式就是使用數字證書,具體是這樣的:
一、咱們須要找到一個第三方機構,它是一個擁有公信力、你們都承認的認證中心,那就是數字證書認證機構(簡稱CA)。
二、服務器在給客戶端傳輸公鑰的過程當中,會把公鑰以及服務器的我的信息經過Hash算法生成信息摘要。爲了防止信息摘要被人調換,客戶端還會用CA提供的私鑰對信息摘要進行加密來造成數字簽名。而且,最後還會把原來沒Hash算法以前的我的信息以及公鑰和數字簽名合併在一塊兒,造成數字證書。
三、當客戶端拿到這份數字證書以後,就會用CA提供的公鑰來對數字證書裏面的數字簽名進行解密來獲得信息摘要,而後對數字證書裏服務器的公鑰以及我的信息進行Hash獲得另一份信息摘要。最後把兩份信息摘要進行對比,若是同樣,則證實這我的是服務器,不然就不是。這樣,就能夠保證服務器的公鑰安全着交給客戶端了。
一個重要的問題是,如何安全轉交認證機構的公鑰是一件很困難的事,所以,大多數瀏覽器開發商發佈版本時,會事先植入經常使用認證機關的公鑰。
咱們能夠Google Chrome爲例:
打開瀏覽器的設置選項,選擇高級,能夠看到隱私設置和安全性下面的一些設置,其中管理證書就能夠看到谷歌瀏覽器一些內置證書,如圖:
下圖選自圖解HTTP:
咱們分析下下面的三種狀況
一、網站是http協議的:
能夠看到是不安全的。
二、 網站是徹底的HTTPS加密的:
能夠看到Google網站的HTTPS前面是有一把小鎖的,這表示,這個網站的鏈接是安全的,而且點擊小鎖能夠看到證書信息。
三、 網站前帶HTTPS可是不是徹底安全的:
注意第三點和第一點的表達:鏈接不安全和鏈接並不是徹底安全這是由於:站點還有http資源,須要把全部連接換成https才能夠帶鎖。