咱們經常使用的加密方式有對稱加密和非對稱加密。這二者的優缺點以下。html
對稱加密
介紹:生成一個密鑰、客戶端和服務端都用這個密鑰解密
優勢:簡單,加密效率高
缺點:沒有一個可靠的密鑰傳輸通道(客戶端和服務端都得知道這個密鑰,意味着這個密鑰須要傳輸)算法
非對稱加密
介紹:生成一個公鑰和一個私鑰,二者配套,公鑰加密只能私鑰解密,私鑰加密只能公鑰解密。
在實際使用的時候,A把本身的公鑰發給B -> B使用A公鑰加密數據後發給A -> A使用本身的私鑰解密,如圖。
優勢:比較安全,私鑰是服務端私有的,因此經過公鑰加密的數據只有服務端能解開,在傳輸上,因爲只傳輸公鑰,非對稱加密不會有對稱加密的傳輸問題。
缺點:加密速度慢,沒法支持大量數據加密。沒法避免中間人攻擊。瀏覽器
TLS
是Transport Layer Security
的縮寫,也叫傳輸層安全協議,定義了傳輸層數據的加密封裝格式,所以,在OSI模型中,它屬於傳輸層上方的會話層。咱們也能夠從另外一個方面解釋,會話層是管理會話的,在證書校驗不經過的時候,會話會被踢出,因此處於會話層。
TLS的前身是網景公司的SSL,SSL3.0以後就是TLS 1.0,能夠認爲TLS和SSL是同一個東西,只是版本不同。
瞭解完這些再瞭解一下TLS相關的一系列名詞,基本就瞭解了TLS,分別以下:安全
CA
Certificate Authority的簡寫,證書頒發機構,負責發放和管理證書,做爲交易中的受信任的第三方機構。
CA簽發證書時候,須要對申請者的信息進行多方面確認,在確認申請者可信的狀況下再頒發證書,CA簽發證書的流程如圖。
加密
根證書
CA本身的證書,這個證書由CA本身簽發,主要包括如下內容:spa
中間證書
經過CA根證書或其餘中間證書籤發的證書,主要包括如下內容:設計
信任鏈
含義:A證書爲了證實本身可信,須要找到頒發者的證書,取其中的頒發者公鑰解開本身證書上的簽名,若是可以解開則證實A證書的公鑰可信,與此同時,若是頒發者的證書不是CA根證書,還須要一級一級往上校驗,直到CA根證書爲止。這造成了一個鏈條狀的信任關係,又叫信任鏈,這些中間證書和CA根證書,會最終bundle在一個證書文件中,信任鏈創建如圖。
可能你們有個疑問,驗證證書的過程當中,爲了驗證D可信,原理上只須要使用證書C驗證便可,不須要一直往上驗證到根證書,但信任鏈這個東西就是這麼設計的,具體爲何,有想法的朋友歡迎交流。code
信任證書
客戶端要與服務端創建會話,須要先信任服務端證書。這個信任動做,就是咱們平時瀏覽器彈出的信任此證書、安裝此證書之類彈窗。通常來講,瀏覽器會經過預置證書到瀏覽器中來保障安全性,這個在安裝瀏覽器的時候就打包在安裝包裏。可是仍是避免不了有時候須要手動去安裝證書的狀況,這就有了必定中間人攻擊的不安全性。htm
TLS創建會話主要分爲如下幾個步驟:blog
如圖:
TLS最大的做用是解決中間人攻擊,安全性更高。同時,TLS還解決了對稱加密沒有可靠傳輸信道的問題。
然而在現實生活中,若是用戶信任了一些未知來源的證書,那麼仍是會有受中間人攻擊的可能性,好比這樣做死。
https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/
https://www.jianshu.com/p/fcd0572c4765
https://www.jianshu.com/p/6bf2f9a37feb