https大白話

web安全相當重要,https勢在必行。https就是web服務的盔甲,防止http裸奔,承擔了web傳輸內容不被第三方竊取和篡改的重任。web

https簡介

最簡單來講,https就是加密的http。https在http和tcp協議層中間加了ssl/tsl層,做用就是給http傳輸內容加密。算法

密碼概念

  • 密碼:一套編/解碼的算法
  • 密鑰:改變密碼行爲的參數
  • 對稱密鑰加密系統: 編/解碼使用相同密鑰的算法
  • 非對稱密鑰加密系統: 編/解碼使用不一樣密鑰的算法
  • 公開密鑰加密系統:一種非對稱密鑰加密系統,採用公鑰和私鑰,公鑰向外公開,私鑰只有使用者私有,私鑰加密,公鑰能夠解密;公鑰加密,私鑰能夠解密。

加密方案

如今的基本狀況是這樣,密碼的算法是衆所周知的,保密的關鍵在於密鑰。瀏覽器

協商密鑰

首先,服務器要和衆多的web客戶端通訊,二者必須擁有一套匹配的密鑰。安全

  • 對稱密鑰加密系統:服務器和web客戶端要擁有相同的對稱密鑰。
  • 非對稱密鑰加密系統:服務器擁有公鑰和私鑰,web客戶端擁有公鑰便可。

web客戶端須要知道對稱密鑰或者公鑰,它從何地獲取?它只能從服務器獲取了,也就是說服務器會把密鑰發送給web客戶端。在發送密鑰的過程是爲了後續加密用的,這自己是沒有加密的,這個就會形成密鑰泄露啊,這個怎麼解決?服務器

咱們想起來非對稱加密系統中的公鑰原本就是公開的,它泄密了無所謂,因此這裏咱們能夠採用非對稱加密系統,服務器把公鑰發送給web客戶端。而後web客戶端用公鑰加密傳輸內容,發送給客戶端,由客戶端私鑰解密。而服務器用私鑰加密傳輸內容,客戶端用公鑰解密。可是這種方案有兩個致命問題:tcp

  1. 第三方知道公鑰,能夠破解服務器用私鑰加密的內容,雖然不能篡改,可是達到了竊取的目的
  2. 第三方能夠劫持公鑰,用本身的公鑰替代服務器的公鑰,發送給web客戶端,web客戶端誤把第三方的公鑰當成服務器的公鑰,那第三方就能夠隨心所欲了

混合加密系統

首先,咱們來解決第一個問題,狀況是這樣,web客戶端用公鑰加密的內容,第三方沒法破解;而服務器用私鑰加密的內容,第三方能夠破解。那咱們能夠利用web客戶端用公鑰加密的內容,第三方沒法破解的特色,在客戶端收到正確的密鑰後,隨機生成一個新的對稱密鑰,經過公鑰加密後,傳輸給服務器。這樣客戶端和服務器就用了一個共享的對稱密鑰,以後就能夠經過這個對稱密鑰去加密通訊了。並且對稱密鑰的加密性能一般是大大優於非對稱加密。這其實是利用非對稱加密系統創建了一條web客戶端到服務器的單向安全通道,而後利用該安全通道,傳輸私密的對稱密鑰來解決這個問題。web安全

數字簽名和證書

第二個問題須要解決web客戶端收到的公鑰究竟是不是真正的服務器發出的公鑰。也就是要確認發送方是否爲服務器,且發送的內容沒有被篡改。咱們能夠想一下實際生活中,咱們怎麼確保寫信人的身份?咱們通常會用簽名或者按手印的方式,這種方式知足兩個特色:性能

  • 惟一性
  • 只有寫信人才擁有,不可模仿

只要知足這兩個條件,咱們就能夠肯定寫信人的身份。那服務器做爲寫信人,有什麼惟一且不可模仿的東西那?那就是私鑰!固然了,咱們不可能直接傳輸私鑰,可是用私鑰加密的數據,也是具備惟一性的,能夠惟一標識服務器,且私鑰只有服務器知道,私鑰加密的數據不可模仿和篡改。用私鑰加密的內容通常是服務器的相關信息。這就是所謂的數字簽名,能夠惟一標識做者,且不可篡改。編碼

可是服務器的私鑰加密的內容,只有服務器公鑰能夠解開,而客戶端並不知道公鑰,這個簽名其實就是爲了給客戶端傳送公鑰,這不是自相矛盾了嗎。。。本身解決不了的問題就須要政府出面了,政府機構能夠給你辦身份證,證實你就是你。咱們能夠經過受信任的第三方證書頒發機構(CA)給服務器辦法證書,標識服務器的身份。證書通常包含如下信息:加密

  • 證書格式版本號
  • 證書序列號
  • 證書籤名算法
  • 證書頒發者
  • 有效期
  • 對象名稱
  • 對象的公開密鑰
  • 數字簽名,由簽名頒發機構的私鑰加密以上信息

數字證書中包含服務器的信息及其數字簽名,數字簽名是由頒發機構私鑰加密證書其餘內容獲得的。而瀏覽器會預先安裝不少簽名頒發機構的證書,證書中包含簽名頒發機構的公鑰和相關信息。大部分的瀏覽器都會對數字證書進行簡單的完整性校驗,步驟以下:

  • 日期檢測,檢查證書的起始日期和結束日期,以確保證書仍然有效
  • 簽名頒發者可信度檢測,每一個證書都是由證書頒發機構(CA)頒發的,它們負責爲服務器擔保。證書有不一樣的級別,每種證書都要求不一樣級別的背景驗證。很是著名的CA,一般都有很是清晰的流程來驗證證書申請人的身份及商業行爲的合法性。瀏覽器會附帶一個簽名頒發機構的受信列表。瀏覽器受到未知頒發機構的證書,一般會彈出警告信息。
  • 簽名檢測,判斷證書是可信的以後,瀏覽器用CA的公鑰對證書中的數字簽名進行解密,而後和證書中其餘信息進行對比是否一致(一般有必定的編碼規則)。
  • 站點身份檢測,服務器證書中一般會包含服務器域名,瀏覽器一般會驗證證書中的域名和正在通話的域名是否匹配,防止第三方替換爲本身在CA機構註冊的合法證書來代替服務器證書。

https通訊過程

瀏覽器請求某個web資源時,它會檢查url前綴:

  • 若是url是http,客戶端就會打開一條到服務器端口80(默認)的鏈接,並向其發送http命令
  • 若是url是https,客戶端就會打開一條道服務器端口443(默認)的鏈接,而後,初始化ssl層,進行ssl握手,對密鑰進行溝通。完成以後進行加密通訊。

加密的https事物過程以下:

  1. 創建到服務器端口443的TCP鏈接
  2. SSL安全參數握手
  3. 在SSL上發送HTTP請求
  4. 在SSL上發送HTTP響應
  5. SSL關閉通知
  6. TCP鏈接關閉

SSL握手的具體過程以下:

  1. 客戶端發送可供選擇的密碼方案並請求證書
  2. 服務器發送選中的密碼方案和證書
  3. 客戶端驗證證書,驗證證書有效以後,發送用服務器公鑰加密的隨機對稱密鑰
  4. 客戶端和服務器端互相告知,開始加密過程

https就是加密的http,採用非對稱密鑰系統、數字證書、數字簽名協商公鑰,而後經過公鑰加密傳遞對稱密鑰,由對稱密鑰加密傳輸請求內容。

相關文章
相關標籤/搜索