1. 程式人生 > >Https原理的簡單描述

Https原理的簡單描述

對Https的原理有點不清楚,研究了下,總結如下,

首先是幾個關鍵字:

Certification, RSA, Symmetric key

 

Https使用了SSL/TSL通訊協議來實現網際網路上的通訊加密。

SSL(Secure Sockets Layer)是TSL(Transport Layer Security)的前身,已經沒了十幾年了。

 

Https的請求在發起真正的資料交換之前做了好多事情都是對使用者透明的,只有在位址列上才能看出一些端倪:

  • 第一種情形是https enable並且Certification得到了認可;
  • 第二種情形是https enable但是Certification沒有得到認可;
  • 第三種是壓根沒enalbe https

首先貼一下https在真正資料交換之前的所完成的步驟:

 

  1. 瀏覽器(client end)發起https請求,內容一般包括:
    a. 希望使用的TSL版本
    b. 瀏覽器支援的加密演算法
  2. 伺服器的回覆並附加Certification, 回覆的內容一般包括:
    a. server同意採用的TSL版本
    b. server告知進行Symmetric key傳輸和校驗Certification的加密演算法(RSA)
    Certification

    證書,跟畢業證書挺像的,也是由一個受信任的機構頒發,頒發給某機構或者某個人某個機器,有有效期,簽名,多了一個東西是public key。
    作用也跟畢業證挺像,瀏覽器收到由知名機構簽發簽發(比如:Versign),有效期內證書,先信了一半,然後在用附帶的public key把數字簽名解密,如果跟正在訪問的域名一致,那就齊了。
    就會是上面的第一種情形了。
    那瀏覽器怎麼知道誰是知名機構呢,那是os內建了一些知名機構的根證書,比如在firefox中的這個例子:

 

規則是如果根證書受信,子證書就受信。

注意用public key解密簽名這一項,就可以防止dns被篡改的攻擊。

 

3. Browser端生成symmetric key,這是用於將來交換資料所用的加密key

4. 使用Server選定的加密演算法(RSA)和Public key對生成的Symmetric key進行加密然後傳送給server端

5. Server用Private key進行解密的到Symmetric key

6. 至此https connection就建立起來了,真正的資料交換使用Symmetric key進行加密後開始。

 

另外非對稱加密(RSA)就不多說了哈。