ssl/tls是什麼?是怎麼工做的?

最近在思考一個關於郵箱服務器的問題,其中涉及到了SSL/TLS加密傳輸,因而想研究一下什麼,究竟是怎麼實現加密的,經過查找各方面的資料,發現這個涉及到的東西還蠻多的,能夠單獨寫一篇文章整理一下本身的理解。web

SSL/TLS是什麼?

SSL(安全套接字層)是一種標準安全協議,用於在在線通訊中創建Web服務器和瀏覽器之間的加密連接。算法

那TLS又是什麼?Transport Layer Security (TLS)是SSL協議(Secure Sockets Layer)的升級版,TLS 1.0一般被標示爲SSL 3.1,TLS 1.1爲SSL 3.2,TLS 1.2爲SSL 3.3。如今習慣將這個兩個組合在一塊兒稱爲SSL/TLS,只要知道它是一種用於加密的安全協議就行了。瀏覽器

當網頁指望用戶提交機密數據(包括我的信息,密碼或信用卡詳細信息)時,網頁應使用加密,這個時候web服務器就應該使用HTTPS協議來傳輸數據,它其實就是HTTP和SSL/TLS結合實現的;一樣的還有SMTPS,它是加密的簡單郵件通訊協議,這樣在傳輸郵件的時候就不是明文傳輸了,通常咱們在設置郵箱服務器的時候能夠選擇是否勾選SSL/TLS的,若是沒有勾選的話郵件就是明文傳輸了。安全

SSL/TLS有什麼做用?

這裏參考了網上的一些觀點: 不使用SSL/TLS的HTTP通訊,就是不加密的通訊。全部信息明文傳播,帶來了三大風險。服務器

  • 竊聽風險(eavesdropping):第三方能夠獲知通訊內容。
  • 篡改風險(tampering):第三方能夠修改通訊內容。
  • 冒充風險(pretending):第三方能夠冒充他人身份參與通訊。

SSL/TLS協議是爲了解決這三大風險而設計的,但願達到session

  • 全部信息都是加密傳播,第三方沒法竊聽。
  • 具備校驗機制,一旦被篡改,通訊雙方會馬上發現。
  • 配備身份證書,防止身份被冒充。

SSL證書

先說明一下:SSL/TLS協議的基本思路是採用公鑰加密法,也就是說,客戶端先向服務器端索要公鑰,而後用公鑰加密信息,服務器收到密文後,用本身的私鑰解密。dom

在講SSL/TLS的工做流程以前,先要說明一下SSL證書這個東西,來思考一個問題: 基本思路里面的公鑰加密法,如何保證公鑰不被篡改?答案是:將公鑰放在數字證書中。只要證書是可信的,公鑰就是可信的。學習

那SSL證書是什麼?怎麼保證它是可信任的? SSL 證書就是遵照 SSL協議,由受信任的數字證書頒發機構CA,在驗證服務器身份後頒發,具備服務器身份驗證和數據傳輸加密功能。 怎麼才能申請到SSL證書?或者說影響該證書申請的因素有哪些? 影響證書的因素:申請中提到的企業/公司是否有合法身份以及申請人是否控制證書​​中提到的域名。網站

申請到證書的步驟是怎麼樣的?加密

  1. 製做CSR文件 CSR就是Certificate Signing Request證書請求文件。這個文件是由申請人制做,在製做的同時,系統會產生2個密鑰,一個是公鑰就是這個CSR文件,另一個是私鑰,存放在服務器上。要製做CSR文件,申請人能夠參考WEB SERVER的文檔,通常APACHE等,使用OPENSSL命令行來生成KEY+CSR2個文件。
  2. CA認證 域名認證,通常經過對管理員郵箱認證的方式,這種方式認證速度快,可是簽發的證書中沒有企業的名稱; 企業文檔認證,須要提供企業的營業執照。通常須要3-5個工做日。 也有須要同時認證以上2種方式的證書,叫EV證書,這種證書可使IE7以上的瀏覽器地址欄變成綠色,因此認證也最嚴格。
  3. 證書的安裝 在收到CA的證書後,能夠將證書部署上服務器,通常APACHE文件直接將KEY+CER複製到文件上,而後修改HTTPD.CONF文件。

注意:證書分爲單域證書、通配符證書、多域證書、擴展驗證證書,申請證書的時候要看是申請那一類了。

證書在什麼狀況下被使用?是怎麼使用的?

  1. 咱們在點擊web站點的時候,好比輸入https://www.domain.com ,進行dns解析後web服務器進行響應,web服務器自動傳送https://www.domain.com 網站的數字證書給用戶,上文說到了,證書是安裝在web服務器裏面的,證書裏面含有公鑰,因此這裏至關於服務器把公鑰傳遞給了客戶端,固然服務器那裏還有本身的私鑰,具體過程以下圖。
    image
  2. 客戶端是使用瀏覽器進行操做的,不一樣版本的瀏覽器自動產生40位或128位的會話密鑰,用於對交易的信息進行加密,也就是說客戶向服務器索要公鑰後還要與服務器協商生成一個「會話祕鑰」。 以下圖,第三步獲取到crt證書後,須要檢驗證書是否有效,若是無效則會顯示警告信息,有效則生成一個隨機數,即會話密鑰,這個會話密鑰再使用crt裏面的公鑰加密後傳輸給web服務器,服務器使用本身的私鑰進行解密,獲取瀏覽器生成的隨機「會話密鑰」,如今客戶端服務器都知道這個「會話密鑰」了,後續通訊都用這個會話密鑰進行加密通訊了。
    image

SSL是怎麼工做的?

簡單歸納就是:

  1. 客戶端向服務器端索要並驗證公鑰。
  2. 雙方協商生成"對話密鑰"。
  3. 雙方採用"對話密鑰"進行加密通訊。 具體是怎麼協商生成「會話密鑰」的,上文提到了,這裏還有一個疑問,爲何不直接使用crt證書裏面的公鑰進行加密,再使用服務器裏面的私鑰進行解密呢?更況且服務器裏面的私鑰也能夠進行加密,crt裏面的證書再進行解密便可。 緣由爲:每一次對話(session),客戶端和服務器端都生成一個"會話密鑰"(session key),用它來加密信息。因爲"對話密鑰"是對稱加密,因此運算速度很是快,而服務器公鑰加密是非對稱加密,比較耗時間,因此證書裏面的公鑰只用於加密"會話密鑰"自己,這樣就減小了加密運算的消耗時間。

那麼會話密鑰和公鑰有什麼區別呢?

  1. 會話加密是對稱加密,服務器和客戶端協商後生產一個會話密鑰,因此服務器和客戶端是共享一個相同的密鑰的,固然不是服務器和全部客戶端共享一個相同的密鑰,而是每一個客戶端都有本身的密鑰,比較這個會話密鑰是客戶端(瀏覽器)隨機生成的,因此服務器須要維護多個密鑰。
  2. 公鑰是採用的非對稱加密,服務器把證書(公鑰)下發給每一個用戶正在使用的客戶端(瀏覽器),因此是客戶端共享公鑰,服務器只掌控私鑰,服務端與客戶端密鑰是一個1對多的關係,客戶端發送的加密信息只能服務端解密,安全級別也更高,可是因爲非對稱加密太慢了,才採用了不一樣客戶端不一樣密鑰的「會話密鑰」來解決這個問題。

具體TLS/SSL裏面涉及到的非對稱加密和對稱加密的區別以及算法以下圖所示:

image

總的來講,客戶端(瀏覽器)與web服務器進入加密通訊,就徹底是使用普通的HTTP協議,只不過用"會話密鑰"加密內容,會話密鑰即圖中的隨機數。

結束語

對SSL/TLS涉及到的底層原理作了一個大概的說明,對學習過程當中遇到的一些問題作了理解和解答,把一些問題理清楚後,對概念的理解就更加深入了,好比明白了某個技術的由來背景,爲何會出現這個東西,問題的初衷是什麼?怎麼實現的?有哪些應用場景,若是把這些都調查清楚,那不管是對這個技術的使用仍是新技術的創新都是有好處了,比只會用這個東西來作一些事情侷限於表面工程要好得多,以前聽大佬講,有的人工做了6,7年,比別人剛畢業處理工做1,2年寫出來的文章還要屎,聽後感受均可怕和悲哀,好好沉澱下去,打好基礎,哪怕是寒冬來了也就不慌了,後續有時間再研究一下SSL證書申請的具體事宜。

相關文章
相關標籤/搜索