只是在應用層與傳輸層之間添加了一個SSL層算法
HTTPS爲何會安全?編程
既然HTTPS是披着SSL外衣的HTTP,那SSL是什麼呢?
SSL是安全套接字層,是目前比較成熟的提供可靠數據傳輸的安全協議。SSL能夠提供證書認證,數據加密,完整性保護等保護性策略。
數據加密原理
SSL採用的加密策略是:非對此加密+對稱加密的混合加密方式
對成加密:單純的對稱加密,加密解密的效率高,可是在客戶端於服務端共享密鑰時,容易被中間劫持泄露,不夠安全
非對稱加密:是新一代加密方案,加密解密銷量低,可是能夠實現密鑰的安全傳輸,想經過公鑰解出私鑰難道極大,基本不可能。
最中採用在第一次交換共享密鑰時,使用非對稱加密。而後用共享密鑰加密。這樣既避免了密鑰被劫持,又保證了效率
數據完整性策略
採用報文摘要的策略,防止報文主題被修改
在報文發送前,先經過md5-base64加密,獲得一個報文主體的摘要,把這個摘要放到請求首部中,等服務器收到信息,採用一樣的算法,加密報文主體,根據獲得的結果是否和報文摘要一致來判斷數據的完整性。
SSL和TLS的關係
目前常見的加密協議有兩個SSL3.0和TLS1.0,它們之間有什麼區別呢?
SSL(Secure Socket Layer):是有瀏覽器開發商網景通訊公司發起並開發到了SSL3.0版本
TLS(Transport Layer Security):後面主導權移交給了IETF組織,他們在SSL3.0基礎上開發了 TLS一系列版本。它們是「父子」關係。
HTTPS協議安全通訊步驟
HTTPS協議安全通訊步驟中有三個主角元素:客戶端,服務器,第三方可信任的證書頒發機構
過程以下:
1.服務器的運維人員向「第三方可信任的證書頒發機構」提供公司的有效信息+公鑰。
2.「第三方可信任的證書頒發機構」認證公司有效,就用「第三方可信任的證書頒發機構」的私鑰給服務器的公鑰簽名,而後建立一個證書,證書中加入了公鑰+公鑰簽名結果,發給服務器。服務器運營人員須要支付必定的費用。
3.客服端安裝瀏覽器,瀏覽器內部內置了「第三方可信任的證書頒發機構」的根證書,裏面包含了「第三方可信任的證書頒發機構」的公鑰信息
//正式開始SSL通訊
4.客戶端發送請求給ClientHello到服務器,請求報文中包含客戶端支持的SSL指定版本號,加密組件列表(使用的加密算法和密鑰長度)
5.服務端收到請求後,也回發生個ClientHello迴應,裏面包含了使用的SSL版本和加密組件(該加密組件是從客戶端發生的列表中篩選出來的)
6.緊接着服務器發生證書報文(Certificate),將服務器申請的公鑰證書傳給客戶端
7.而後服務器發生一個Server Hello Done報文給客戶端,表示初期階段的SSL握手協商結束。
8.客戶端收到服務器發來的公鑰證書後,拿本地存儲的第三方機構根證書中的公鑰對證書中的簽名信息解密,若是解密的結構同證書中的原始服務器公鑰信息同樣,證實服務器可信。
9.接着客戶端在本地生成一個隨機密碼字符串。用服務器的公鑰加密這個字符串,將獲得的結果傳遞給服務器器。
10.而後客戶端再發送一個Change Cipher Spec報文(修改加密規則說明)給服務器,告訴服務器下面的通訊將採用剛纔的隨機密碼字符串做爲加密密鑰。
11.最後客戶端發生一個Finish報文,報文中包含了從鏈接到如今全部報文的總體校驗碼,上面一系列的握手協商是否能最後成功,就看服務器可否正確解密這個Finish報文了。
12.服務器正確解密後,也發送個Change Cipher Spec報文(修改加密規則說明)給客戶端。
13.最後服務端也發送個Finish報文讓客戶端解密驗證。
14.等客戶端、服務器二者的Finished報文都正常交換後,SSL鏈接算是正式創建完成。下面的通訊就會受到SSL的加密保護。
15.如今客戶端就能夠安全的給服務器發送簡單的應用層協議(http)了,並獲得受保護的響應
16.最後通信完成,由客戶端發送close_notify報文,通知服務器斷開連接。