SSL證書原理講解

一直以來都對數字證書的簽發,以及信任等事情只知其一;不知其二。總算有個閒適的週末來總結和深刻一下相關的知識。html

 

CA:git

CA(Certificate Authority)是證書的簽發機構,它是負責管理和簽發證書的第三方機構,是受到普遍信任的機構。通常在咱們的電腦中,瀏覽器裏,或者手機裏都會內置一批這樣的受信機構的根證書。算法

 

證書信任鏈:瀏覽器

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

 

公鑰密碼體制:post

公鑰密碼體制分爲三個部分,公鑰、私鑰、加密解密算法,它的加密解密過程以下:網站

  • 加密:經過加密算法和公鑰對內容(或者說明文)進行加密,獲得密文。加密過程須要用到公鑰。 
  • 解密:經過解密算法和私鑰對密文進行解密,獲得明文。解密過程須要用到解密算法和私鑰。注意,由公鑰加密的內容,只能由私鑰進行解密,也就是說,由公鑰加密的內容,若是不知道私鑰,是沒法解密的。

公鑰密碼體制的公鑰和算法都是公開的(這是爲何叫公鑰密碼體制的緣由),私鑰是保密的。你們都以使用公鑰進行加密,可是隻有私鑰的持有者才能解密。在實際的使用中,有須要的人會生成一對公鑰和私鑰,把公鑰發佈出去給別人使用,本身保留私鑰。加密

 

CA證書:操作系統

顧名思義CA證書就是由CA機構簽發的證書。其實證書誰均可以籤,你也能夠本身給本身簽發證書,可是因爲你本身並非被普遍信任的機構,因此你本身簽發的證書並無什麼用。公網也不會信任你的證書。服務器證書包括如下幾種信息:htm

  • 證書的發佈機構 
  • 證書的有效期 
  • 公鑰 
  • 證書全部者(Subject) 
  • 簽名所使用的算法 
  • 指紋以及指紋算法

◆Issuer (證書的發佈機構)

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

 

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

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

 

◆Public key (公鑰)

這個咱們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對消息進行加密的,第2章的例子中常常用到的。這個數字證書的公鑰是2048位的,它的值能夠在圖的中間的那個對話框中看獲得,是很長的一串數字。

 

◆Subject (主題)

這個證書是發佈給誰的,或者說證書的全部者,通常是某我的或者某個公司名稱、機構的名稱、公司網站的網址等。 對於這裏的證書來講,證書的全部者是Trustwave這個公司。

 

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

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

 

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

這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在發佈證書時,發佈者根據指紋算法(一個hash算法)計算整個證書的hash值(指紋)並和證書放在一塊兒,使用者在打開證書時,本身也根據指紋算法計算一下證書的hash值(指紋),若是和剛開始的值對得上,就說明證書沒有被修改過,由於證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用"CA"證書機構的私鑰用簽名算法(Signature algorithm)加密後和證書放在一塊兒。

 

CA如何給咱們簽發一個有效證書:

舉個例子方便你們理解,假設咱們公司"ABC Company"花了1000塊錢,向一個證書發佈機構"SecureTrust CA"爲咱們本身的公司"ABC Company"申請了一張證書,注意,這個證書發佈機構"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通訊:

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

 

 

Reference:

https://program-think.blogspot.com/2010/02/introduce-digital-certificate-and-ca.html  數字證書及CA的掃盲介紹

http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html  數字證書原理

http://blog.jobbole.com/104919

相關文章
相關標籤/搜索