1. 程式人生 > >LNMP架構二十一(SSL原理)

LNMP架構二十一(SSL原理)

二十一、SSL原理

1、CA:

CA(Certificate Authority)是證書的簽發機構,它是負責管理和簽發證書的第三方機構,是受到廣泛信任的機構。一般在我們的電腦中,瀏覽器裡,或者手機裡都會內建一批這樣的受信機構的根證書

2、證書信任鏈:

比如我是CA機構我簽發了一封證書 ,我這份證書是信任B證書的,另外B證書又信任了其他的C證書......那麼這條鏈條下去的都可以信任。所以一旦CA機構的根證書不可信了,那麼所有由他簽發出來的證書將全部變得不可信,後果很嚴重。

3、公鑰密碼體制:

公鑰密碼體制分為三個部分,公鑰、私鑰、加密解密演算法,它的加密解密過程如下:

  • 加密:通過加密演算法和公鑰對內容(或者說明文)進行加密,得到密文。加密過程需要用到公鑰。 
  • 解密:通過解密演算法和私鑰對密文進行解密,得到明文。解密過程需要用到解密演算法和私鑰。注意,由公鑰加密的內容,只能由私鑰進行解密,也就是說,由公鑰加密的內容,如果不知道私鑰,是無法解密的。

公鑰密碼體制的公鑰和演算法都是公開的(這是為什麼叫公鑰密碼體制的原因),私鑰是保密的。大家都以使用公鑰進行加密,但是隻有私鑰的持有者才能解密。在實際的使用中,有需要的人會生成一對公鑰和私鑰,把公鑰釋出出去給別人使用,自己保留私鑰。

4、CA證書:

顧名思義CA證書就是由CA機構簽發的證書。其實證書誰都可以籤,你也可以自己給自己簽發證書,但是由於你自己並不是被廣泛信任的機構,所以你自己簽發的證書並沒有什麼用。公網也不會信任你的證書。伺服器證書包括以下幾種資訊:

  • 證書的釋出機構 
  • 證書的有效期 
  • 公鑰 
  • 證書所有者(Subject) 
  • 簽名所使用的演算法 
  • 指紋以及指紋演算法

◆Issuer (證書的釋出機構)

指出是什麼機構釋出的這個證書,也就是指明這個證書是哪個公司建立的(只是建立證書,不是指證書的使用者)。對於上面的這個證書來說,就是指"SecureTrust CA"這個機構。

 

◆Valid from , Valid to (證書的有效期)

也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。

 

◆Public key (公鑰)

公鑰是用來對訊息進行加密的。這個數字證書的公鑰是2048位的,它的值是很長的一串數字。

 

◆Subject (主題)

這個證書是釋出給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司網站的網址等。 對於這裡的證書來說,證書的所有者是Trustwave這個公司。

 

◆Signature algorithm (簽名所使用的演算法)

就是指的這個數字證書的數字簽名所使用的加密演算法,這樣就可以使用證書釋出機構的證書裡面的公鑰,根據這個演算法對指紋進行解密。指紋的加密結果就是數字簽名。

 

◆Thumbprint, Thumbprint algorithm (指紋以及指紋演算法)

這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在釋出證書時,釋出者根據指紋演算法(一個hash演算法)計算整個證書的hash值(指紋)並和證書放在一起,使用者在開啟證書時,自己也根據指紋演算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因為證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用"CA"證書機構的私鑰用簽名演算法(Signature algorithm)加密後和證書放在一起。

 

5、CA如何給我們簽發一個有效證書:

舉個例子方便大家理解:

假設我們公司"ABC Company"花了1000塊錢,向一個證書釋出機構"SecureTrust CA"申請了一張證書,注意這個證書釋出機構"SecureTrust CA"是一個大家公認並被一些權威機構接受的證書釋出機構,我們的作業系統裡面已經安裝了"SecureTrust CA"的證書。

"SecureTrust CA"在給我們釋出證書時,把Issuer,Public key,Subject,Valid from,Valid to等資訊以明文的形式寫到證書裡面,然後用一個指紋演算法計算出這些數字證書內容的一個指紋,並把指紋和指紋演算法用自己的私鑰進行加密,然後和證書的內容一起釋出,同時"SecureTrust CA"還會給一個我們公司"ABC Company"的私鑰給到我們。我們花了1000塊錢買的這個證書的內容如下:

×××××××××××××××證書內容開始×××××××××××××××××

Issuer : SecureTrust CA

Subject : ABC Company

Valid from : 某個日期

Valid to: 某個日期

Public Key : 一串很長的數字

…… 其它的一些證書內容……

{證書的指紋和計算指紋所使用的指紋演算法}[SecureTrust CA的私鑰|RSA]      //這個就是"SecureTrust CA"對這個證書的一個數字簽名,表示這個證書確實是他釋出的,有什麼問題他會負責(收了我們1000塊,出了問題肯定要負責任的)

 

所以最後在我們使用https的時候究竟發生了什麼:

結合上面這個圖我一步一步講解:

1. 客戶端向一個需要https訪問的網站發起請求。

2. 伺服器將證書傳送給客戶端進行校驗。證書裡面包含了其公鑰。這裡要特別說一下客戶端到底如何來校驗對方發過來的數字證書是否有效。

  1. 首先在本地電腦尋找是否有這個伺服器證書上的ca機構的根證書。如果有繼續下一步,如果沒有彈出警告。
  2. 使用ca機構根證書的公鑰對伺服器證書的指紋和指紋演算法進行解密。
  3. 得到指紋演算法之後,拿著這個指紋演算法對伺服器證書的摘要進行計算得到指紋。
  4. 將計算出的指紋和從伺服器證書中解密出的指紋對比看是否一樣如果一樣則通過認證。
     

3. 校驗成功之後,客戶端會生成一個隨機串,然後使用伺服器證書的公鑰進行加密之後傳送給伺服器。

4. 伺服器通過使用自己的私鑰解密得到這個隨機值。

5. 伺服器從此開始使用這個隨機值進行對稱加密開始和客戶端進行通訊。

6. 客戶端拿到值用對稱加密方式 使用隨機值進行解密。

 

為什麼不一直使用非對稱進行加密,而是在類似握手之後開始使用對稱加密演算法進行https通訊:

非對稱加密的消耗和所需的計算以及時間遠比對稱加密消耗要大,所以在握手和認證之後,伺服器和客戶端就開始按照約定的隨機串,對後續的資料傳輸進行加密。