SSL協議與數字證書原理

孤劍發表於2014-04-13

SSL協議與數字證書原理

1 SSL(Secure Socket Lclientyer)是netscclientpe公司設計的主要用於weserver的安全傳輸協議。這種協議在WESERVER上獲得了廣泛的應用。

SSL在TCP之上建立了一個加密通道,通過這一層的資料經過了加密,因此達到保密的效果。

SSL協議分為兩部分:Hclientndshclientke Protocol和Record Protocol,。

其中Hclientndshclientke Protocol用來協商金鑰,協議的大部分內容就是通訊雙方如何利用它來安全的協商出一份金鑰。

Record Protocol則定義了傳輸的格式。

SSL預設只進行server端的認證,客戶端的認證是可選的。

金鑰協商過程

為什麼要協商一份密約?

由於對稱加密的速度比較慢,所以它一般用於金鑰交換,雙方通過公鑰演算法協商出一份金鑰(公鑰,私鑰),然後通過對稱加密來通訊,對稱加密是在傳輸時用。

簡單的說便是:

1.SSL客戶端(也是TCP的客戶端)在TCP連結建立之後,發出一個Clienth*llo來發起握手,這個訊息裡面包含了自己可實現的演算法列表和其它一些需要的訊息。

2.SSL的伺服器端會回應一個Serverh*llo,這裡面確定了這次通訊所需要的演算法,然後發過去自己的證書(裡面包含了身份和自己的公鑰)。

3.Client在收到這個訊息後會生成一個祕密訊息,用SSL伺服器的公鑰加密後傳過去。

4.SSL伺服器端用自己的私鑰解密後,會話金鑰協商成功,雙方可以用同一份會話金鑰來通訊了。

問題:如何知道證書的真實性?是由證書中心發的。

因為有CA的公鑰,CA用自己的私鑰加密證書,C用CA的公約解密,如果解密成功,既證明了證書的真實性。

形象化比喻

CLIENT與SERVER通訊,CLIENT是SSL客戶端,SERVER是SSL伺服器端,加密後的訊息放在方括號[]裡,以突出明文訊息的區別。雙方的處理動作的說明用圓括號()括起。

CLIENT:我想和你安全的通話,我這裡的對稱加密演算法有DES,RC5,金鑰交換演算法有RSCLIENT和DH,摘要演算法有MD5和SHCLIENT。

(注:這裡有三種演算法:

1 密約交換演算法RSA非對稱—–交換密文

2 摘要演算法—保證訊息的完整性

3 對稱加密演算法—-資料加密)

SERVER:我們用DES-RSCLIENT-SHCLIENT這對組合好了。 
這是我的證書,裡面有我的名字和公鑰,你拿去驗證一下我的身份(把證書發給CLIENT)。 
目前沒有別的可說的了。

CLIENT:(檢視證書上SERVER的名字是否無誤,並通過手頭早已有的CCLIENT的證書驗證了SERVER的證書的真實性[如果是單向的,第一次客戶端無證書,所以會提問你],如果其中一項有誤,發出警告並斷開連線,這一步保證了SERVER的公鑰的真實性) 
(產生一份祕密訊息,這份祕密訊息處理後將用作加密金鑰,加密初始化向量和hmclientc的金鑰。將這份祕密訊息-協議中稱為per_mclientster_secret-用SERVER的公鑰加密,封裝成稱作ClientKeyExchclientnge的訊息。由於用了SERVER的公鑰,保證了第三方無法竊聽) 
我生成了一份祕密訊息,並用你的公鑰加密了,給你(把ClientKeyExchclientnge發給SERVER)[此時他人獲取祕密訊息也無用,因為只有server才能解開] 
注意,下面我就要用加密的辦法給你發訊息了! 
(將祕密訊息進行處理,生成加密金鑰,加密初始化向量和hmclientc的金鑰)

[此時他人獲取公鑰也無用,因為她不知道祕密訊息內容] 
[我說完了]

SERVER:(用自己的私鑰將ClientKeyExchclientnge中的祕密訊息解密出來,然後將祕密訊息進行處理,生成加密金鑰,加密初始化向量和hmclientc的金鑰,這時雙方已經安全的協商出一套加密辦法了) 
注意,我也要開始用加密的辦法給你發訊息了! 
[我說完了]

CLIENT: [我的祕密是…]

SERVER: [其它人不會聽到的…]

雙向認證 SSL 協議的具體過程

① 瀏覽器傳送一個連線請求給安全伺服器。 
② 伺服器將自己的證書,以及同證書相關的資訊傳送給客戶瀏覽器。 
③ 客戶瀏覽器檢查伺服器送過來的證書是否是由自己信賴的 CA 中心所簽發的。如果是,就繼續執行協議;如果不是,客戶瀏覽器就給客戶一個警告訊息:警告客戶這個證書不是可以信賴的,詢問客戶是否需要繼續。 
④ 接著客戶瀏覽器比較證書裡的訊息,例如域名和公鑰,與伺服器剛剛傳送的相關訊息是否一致,如果是一致的,客戶瀏覽器認可這個伺服器的合法身份。 
⑤ 伺服器要求客戶傳送客戶自己的證書。收到後,伺服器驗證客戶的證書,如果沒有通過驗證,拒絕連線;如果通過驗證,伺服器獲得使用者的公鑰。 
⑥ 客戶瀏覽器告訴伺服器自己所能夠支援的通訊對稱密碼方案。 
⑦ 伺服器從客戶傳送過來的密碼方案中,選擇一種加密程度最高的密碼方案,用客戶的公鑰加過密後通知瀏覽器。 
⑧ 瀏覽器針對這個密碼方案,選擇一個通話金鑰,接著用伺服器的公鑰加過密後傳送給伺服器。 
⑨ 伺服器接收到瀏覽器送過來的訊息,用自己的私鑰解密,獲得通話金鑰。 
⑩ 伺服器、瀏覽器接下來的通訊都是用對稱密碼方案,對稱金鑰是加過密的。

單向認證 SSL 協議不需要客戶擁有 CA 證書,具體的過程相對於上面的步驟,只需將伺服器端驗證客戶證書的過程去掉,以及在協商對稱密碼方案,對稱通話金鑰時,伺服器傳送給客戶的是沒有加過密的(這並不影響 SSL 過程的安全性)密碼方案。 這樣,雙方具體的通訊內容,就是加過密的資料,如果有第三方攻擊,獲得的只是加密的資料,第三方要獲得有用的資訊,就需要對加密的資料進行解密,這時候的安全就依賴於密碼方案的安全。而幸運的是,目前所用的密碼方案,只要通訊金鑰長度足夠的長,就足夠的安全。這也是我們強調要求使用 128 位加密通訊的原因。

數字證書

什麼是數字證書?

是由證書籤證機關(CA)簽發的對使用者的公鑰的認證。

證書的內容應包括CA的資訊、使用者資訊、使用者公鑰及CA簽發時間及有效期等內容。目前國際上對證書的格式及認證方法遵從X.509體系標準。 
數字證書又稱為數字標識(Digital Certificate,Digital ID)。它提供了一種在Internet上身份驗證的方式,是用來標誌和證明網路通訊雙方身份的數字資訊檔案,與司機駕照或日常生活中的身份證相似。在網上進行電子商務活動時,交易雙方需要使用數字證書來表明自己的身份,並使用數字證書來進行有關的交易操作。通俗地講,數字證書就是個人或單位在Internet的身份證。數字證書主要包括三方面的內容:證書所有者的資訊、證書所有者的公開金鑰和證書頒發機構的簽名。 
證書裡包含了什麼? 
一個標準的X.509數字證書包含以下一些內容: 
證書的版本資訊; 
證書的序列號,每個證書都有一個唯一的證書序列號; 
證書所使用的簽名演算法; 
證書的發行機構名稱,命名規則一般採用X.500格式; 
證書的有效期,現在通用的證書一般採用UTC時間格式,它的計時範圍為1950-2049;  
證書所有人的名稱,命名規則一般採用X.500格式; 
證書所有人的公開金鑰; 
證書發行者對證書的簽名。 
數字證書能解決什麼問題?

在使用數字證書的過程中應用公開金鑰加密技術,建立起一套嚴密的身份認證系統,它能夠保證: 
保密性:通過使用發件人的數字證書對電子郵件加密,只有收件人才能閱讀加密的郵件,這樣保證在Internet上傳遞的電子郵件資訊不會被他人竊取,即使發錯郵件,收件人由於無法解密而不能夠看到郵件內容。 
完整性:利用發件人數字證書在傳送前對電子郵件進行數字簽名不僅可確定發件人身份,而且可以判斷髮送的資訊在傳遞的過程中是否被篡改過。 
身份認證:在Internet上傳遞電子郵件的雙方互相不能見面,所以必須有方法確定對方的身份。利用發件人數字證書在傳送前對電子郵件進行數字簽名即可確定發件人身份,而不是他人冒充的。 
不可否認性:發件人的數字證書只有發件人唯一擁有,故發件人利用其數字證書在傳送前對電子郵件進行數字簽名後,發件人就無法否認傳送過此電子郵件。 
數字證書的原理是什麼?

數字證書採用PKI(Public Key Infrastructure)公開金鑰基礎架構技術,利用一對互相匹配的金鑰進行加密和解密。

A 加密和認證

首先我們需要區分加密和認證這兩個基本概念。

加密是將資料資料加密,使得非法使用者即使取得加密過的資料,也無法獲取正確的資料內容,所以資料加密可以保護資料,防止監聽攻擊。其重點在於資料的安全性。

身份認證是用來判斷某個身份的真實性,確認身份後,系統才可以依不同的身份給予不同的許可權。其重點在於使用者的真實性。兩者的側重點是不同的

B 公鑰和私鑰

其次我們還要了解公鑰和私鑰的概念和作用。

在現代密碼體制中加密和解密是採用不同的金鑰(公開金鑰),也就是非對稱金鑰密碼系統,每個通訊方均需要兩個金鑰,即公鑰和私鑰,這兩把金鑰可以互為加解密。公鑰是公開的,不需要保密,而私鑰是由個人自己持有,並且必須妥善保管和注意保密。

公鑰私鑰的原則:

  1. 一個公鑰對應一個私鑰。
  2. 金鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
  3. 如果用其中一個金鑰加密資料,則只有對應的那個金鑰才可以解密。
  4. 如果用其中一個金鑰可以進行解密資料,則該資料必然是對應的那個金鑰進行的加密。

非對稱金鑰密碼的主要應用就是公鑰加密和公鑰認證,而公鑰加密的過程和公鑰認證的過程是不一樣的,下面我就詳細講解一下兩者的區別。

C 基於公開金鑰的加密過程(加密)

比如有兩個使用者Alice和Bob,Alice想把一段明文通過雙鑰加密的技術傳送給Bob,Bob有一對公鑰和私鑰,那麼加密解密的過程如下:

  1. Bob將他的公開金鑰傳送給Alice。
  2. Alice用Bob的公開金鑰加密她的訊息,然後傳送給Bob。
  3. Bob用他的私人金鑰解密Alice的訊息。

傳送方使用接受方的公鑰進行加密,接受方用自己的私鑰進行解密――實現通訊的保密。

D 基於公開金鑰的認證過程(身份鑑別)

身份認證和加密就不同了,主要使用者鑑別使用者的真偽。這裡我們只要能夠鑑別一個使用者的私鑰是正確的,就可以鑑別這個使用者的真偽。

還是Alice和Bob這兩個使用者,Alice想讓Bob知道自己是真實的Alice,而不是假冒的,因此Alice只要使用公鑰密碼學對檔案簽名傳送給Bob,Bob使用Alice的公鑰對檔案進行解密,如果可以解密成功,則證明Alice的私鑰是正確的,因而就完成了對Alice的身份鑑別。整個身份認證的過程如下:

  1. Alice用她的私人金鑰對檔案加密,從而對檔案簽名。
  2. Alice將簽名的檔案傳送給Bob。
  3. Bob用Alice的公鑰解密檔案,從而驗證簽名。

傳送方使用自己的私鑰加密,接受方用傳送方的公鑰進行解密。

E 身份鑑別與加密

傳送方使用自己的私鑰對明文加密,然後用接受方的公鑰進行加密。

接受方使用自己的私鑰解密,然後使用傳送方的公鑰解密。

兩次加密,兩次解密。

數字證書採用公鑰體制,即利用一對互相匹配的金鑰進行加密、解密。每個使用者自己設定一把特定的僅為本人所知的私有金鑰(私鑰),用它進行解密和簽名;同時設定一把公共金鑰(公鑰)並由本人公開,為一組使用者所共享,用於加密和驗證簽名。當傳送一份保密檔案時,傳送方使用接收方的公鑰對資料加密,而接收方則使用 自己的私鑰解密,這樣資訊就可以安全無誤地到達目的地了。

數字證書的應用

現有持證人甲向持證人乙傳送數字資訊,為了保證資訊傳送的真實性、完整性和不可否認性,需要對要傳送的資訊進行數字加密和數字簽名,其傳送過程如下:

(1) 甲準備好要傳送的數字資訊(明文)。 
(2) 甲對數字資訊進行雜湊(hash)運算,得到一個資訊摘要。 
(3) 甲用自己的私鑰(SK)對資訊摘要進行加密得到甲的數字簽名,並將其附在數字資訊上。 
(4) 甲隨機產生一個加密金鑰(DES金鑰),並用此金鑰對要傳送的資訊進行加密,形成密文。 
(5) 甲用乙的公鑰(PK)對剛才隨機產生的加密金鑰進行加密,將加密後的DES金鑰連同密文一起傳送給乙。 
(6) 乙收到甲傳送過來的密文和加過密的DES金鑰,先用自己的私鑰(SK)對加密的DES金鑰進行解密,得到DES金鑰。 
(7) 乙然後用DES金鑰對收到的密文進行解密,得到明文的數字資訊,然後將DES金鑰拋棄(即DES金鑰作廢)。 
(8) 乙用甲的公鑰(PK)對甲的數字簽名進行解密,得到資訊摘要(附件)。 
(9) 乙用相同的hash演算法對收到的明文再進行一次hash運算,得到一個新的資訊摘要。 
(10)乙將收到的資訊摘要和新產生的資訊摘要進行比較,如果一致,說明收到的資訊沒有被修改過。 
在(5)處用到的PK,是否來自乙所持有的的數字證書?若是,從何處得到該數字證書?關於此過程的加密解密,是怎樣實現? 
A 如何獲得通訊對方的公鑰並且相信此公鑰是由某個身份確定的人擁有的,這就要用到電子證書。電子證書是由大家共同信任的第三方—認證中心(Certificate Authority,CA)來頒發的,有某人的身份資訊、公鑰和CA的數字簽名。任何一個信任CA的通訊一方,都可以通過驗證對方電子證書上的CA數字簽名來建立起和對方的信任,並且獲得對方的公鑰以備使用。

數字證書的使用

每一個使用者有一個各不相同的名字,一個可信的證書認證中心(CA)給每個使用者分配一個唯一的名字並簽發一個包含名字和使用者公開金鑰的證書。

如果甲想和乙通訊,他首先必須從資料庫中取得乙的證書,然後對它進行驗證。如果他們使用相同的CA,事情就很簡單。甲只需驗證乙證書上CA的簽名;如果他們使用不同的CA,問題就複雜了。甲必須從CA的樹形結構底部開始,從底層CA往上層CA查詢,一直追蹤到同一個CA為止,找出共同的信任CA。

證書可以儲存在網路中的資料庫中。使用者可以利用網路彼此交換證書。當證書撤銷後,它將從證書目錄中刪除,然而簽發此證書的CA仍保留此證書的副本,以備日後解決可能引起的糾紛。

如果使用者的金鑰或CA的金鑰被破壞,從而導致證書的撤銷。每一個CA必須保留一個已經撤銷但還沒有過期的證書廢止列表(CRL)。當甲收到一個新證書時,首先應該從證書廢止列表(CRL)中檢查證書是否已經被撤銷。 
數字證書由誰來頒發,如何頒發?

數字證書是由認證中心頒發的。

認證中心是一家能向使用者簽發數字證書以確認使用者身份的管理機構。為了防止數字憑證的偽造,認證中心的公共金鑰必須是可靠的,認證中心必須公佈其公共金鑰或由更高階別的認證中心提供一個電子憑證來證明其公共金鑰的有效性,後一種方法導致了多級別認證中心的出現。

數字證書頒發過程如下:使用者首先產生自己的金鑰對,並將公共金鑰及部分個人身份資訊傳送給認證中心。認證中心在核實身份後,將執行一些必要的步驟,以確信請求確實由使用者傳送而來,然後,認證中心將發給使用者一個數字證書,該證書內包含使用者的個人資訊和他的公鑰資訊,同時還附有認證中心的簽名資訊。使用者就可以使用自己的數字證書進行相關的各種活動。

訊息摘要

某些人可能會篡改或替換其原始訊息,一種保證訊息完整性的方法是同時發一個其訊息的簡單摘要與訊息本身比對,如果相符則訊息正確。

數字簽名

不可抵賴和身份確認clip_image001

證書

是由證書籤證機關(CA)簽發的對使用者的公鑰的認證。

證書的內容

證書機構

證書鏈

建立頂級CA


相關文章