[轉]SSL協議與數字證書原理

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

SSL在TCP之上創建了一個加密通道,經過這一層的數據通過了加密,所以達到保密的效果。linux

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

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

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

SSL缺省只進行server端的認證,客戶端的認證是可選的。apache

密鑰協商過程瀏覽器

爲何要協商一份密約?安全

因爲對稱加密的速度比較慢,因此它通常用於密鑰交換,雙方經過公鑰算法協商出一份密鑰(公鑰,私鑰),而後經過對稱加密來通訊,對稱加密是在傳輸時用。服務器

簡單的說即是:網絡

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 加密和認證

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

加密是將數據資料加密,使得非法用戶即便取得加密過的資料,也沒法獲取正確的資料內容,因此數據加密能夠保護數據,防止監聽攻擊。其重點在於數據的安全性。

身份認證是用來判斷某個身份的真實性,確認身份後,系統才能夠依不一樣的身份給予不一樣的權限。其重點在於用戶的真實性。二者的側重點是不一樣的

公鑰和私鑰

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

在現代密碼體制中加密和解密是採用不一樣的密鑰(公開密鑰),也就是非對稱密鑰密碼系統,每一個通訊方均須要兩個密鑰,即公鑰和私鑰,這兩把密鑰能夠互爲加解密。公鑰是公開的,不須要保密,而私鑰是由我的本身持有,而且必須妥善保管和注意保密。

公鑰私鑰的原則:

  1. 一個公鑰對應一個私鑰。
  2. 密鑰對中,讓你們都知道的是公鑰,不告訴你們,只有本身知道的,是私鑰。
  3. 若是用其中一個密鑰加密數據,則只有對應的那個密鑰才能夠解密。
  4. 若是用其中一個密鑰能夠進行解密數據,則該數據必然是對應的那個密鑰進行的加密。

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

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

好比有兩個用戶Alice和Bob,Alice想把一段明文經過雙鑰加密的技術發送給Bob,Bob有一對公鑰和私鑰,那麼加密解密的過程以下:

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

發送方使用接受方的公鑰進行加密,接受方用本身的私鑰進行解密――實現通訊的保密。

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

身份認證和加密就不一樣了,主要用戶鑑別用戶的真僞。這裏咱們只要可以鑑別一個用戶的私鑰是正確的,就能夠鑑別這個用戶的真僞。

仍是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

相關文章
相關標籤/搜索