1) 在windows下檢視乙個證書時,介面是這樣的,我們主要關注一下details tab頁,其中的內容比較長,我滾動內容後後抓了三個圖,把完整的資訊顯示出來:
裡面的內容比較多——version、serial number、signature algorithm 等等,挑幾個重要的解釋一下。
◆issuer (證書的發布機構)
指出是什麼機構發布的這個證書,也就是指明這個證書是哪個公司建立的(只是建立證書,不是指證書的使用者)。對於上面的這個證書來說,就是指"securetrust ca"這個機構。
◆valid from , valid to (證書的有效期)
也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。
◆public key (公鑰)
這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對訊息進行加密的,第2章的例子中經常用到的。這個數字證書的公鑰是2048位的,它的值可以在圖的中間的那個對話方塊中看得到,是很長的一串數字。
◆subject (主題)
◆signature algorithm (簽名所使用的演算法)
就是指的這個數字證書的數字簽名所使用的加密演算法,這樣就可以使用證書發布機構的證書裡面的公鑰,根據這個演算法對指紋進行解密。指紋的加密結果就是數字簽名(第1.5節中解釋過數字簽名)。
◆thumbprint, thumbprint algorithm (指紋(hash值)以及指紋演算法(hash演算法))
這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過,這東西的作用和2.7中說到的第3個問題類似。 其原理就是在發布證書時,發布者根據指紋演算法(乙個hash演算法)計算整個證書的hash值(指紋)並和證書放在一起,使用者在開啟證書時,自己也根據指紋演算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因為證書的內容被修改後,根據證書的內容計算的出的hash值(指紋)是會變化的。 注意,這個指紋會使用"securetrust ca"這個證書機構的私鑰用簽名演算法(signature algorithm)加密後和證書放在一起。
注意,為了保證安全,在證書的發布機構發布證書時,證書的指紋和指紋演算法,都會加密後再和證書放到一起發布,以防有人修改指紋後偽造相應的數字證書。這裡問題又來了,證書的指紋和指紋演算法用什麼加密呢?他們是用證書發布機構的私鑰進行加密的。可以用證書發布機構的公鑰對指紋和指紋演算法解密,也就是說證書發布機構除了給別人發布證書外,他自己本身也有自己的證書。證書發布機構的證書是**來的呢???這個證書發布機構的數字證書(一般由他自己生成)在我們的作業系統剛安裝好時(例如windows xp等作業系統),這些證書發布機構的數字證書就已經被微軟(或者其它作業系統的開發機構)安裝在作業系統中了,微軟等公司會根據一些權威安全機構的評估選取一些信譽很好並且通過一定的安全認證的證書發布機構,把這些證書發布機構的證書預設就安裝在作業系統裡面了,並且設定為作業系統信任的數字證書。這些證書發布機構自己持有與他自己的數字證書對應的私鑰,他會用這個私鑰加密所有他發布的證書的指紋作為數字簽名。
2) 如何向證書的發布機構去申請證書
舉個例子方便大家理解,假設我們公司"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塊,出了問題肯定要負責任的)
×××××××××××××××證書內容結束×××××××××××××××××
// 記不記得前面的約定?{} 表示rsa加密後的內容,[ | ]表示用什麼金鑰和演算法進行加密
我們"abc company"申請到這個證書後,我們把證書投入使用,我們在通訊過程開始時會把證書發給對方,對方如何檢查這個證書的確是合法的並且是我們"abc company"公司的證書呢?首先應用程式(對方通訊用的程式,例如ie、outlook等)讀取證書中的issuer(發布機構)為"securetrust ca" ,然後會在作業系統中受信任的發布機構的證書中去找"securetrust ca"的證書,如果找不到,那說明證書的發布機構是個水貨發布機構,證書可能有問題,程式會給出乙個錯誤資訊。 如果在系統中找到了"securetrust ca"的證書,那麼應用程式就會從證書中取出"securetrust ca"的公鑰,然後對我們"abc company"公司的證書裡面的指紋和指紋演算法用這個公鑰進行解密,然後使用這個指紋演算法計算"abc company"證書的指紋,將這個計算的指紋與放在證書中的指紋對比,如果一致,說明"abc company"的證書肯定沒有被修改過並且證書是"securetrust ca" 發布的,證書中的公鑰肯定是"abc company"的。對方然後就可以放心的使用這個公鑰和我們"abc company"進行通訊了。
★這個部分非常重要,一定要理解,您可以重新回顧一下之前的兩章「1、基礎知識」和「 2、乙個加密通訊過程的演化」,然後再來理解這部分的內容。
3) 證書的發布機構
前面已經初步介紹了一下證書發布機構,這裡再深入討論一下。
其實所有的公司都可以發布證書,我們自己也可以去註冊一家公司來專門給別人發布證書。但是很明顯,我們自己的專門發布證書的公司是不會被那些國際上的權威機構認可的,人家怎麼知道你是不是個狗屁皮包公司?因此微軟在它的作業系統中,並不會信任我們這個證書發布機構,當應用程式在檢查證書的合法信的時候,一看證書的發布機構並不是作業系統所信任的發布機構,就會丟擲錯誤資訊。也就是說windows作業系統中不會預先安裝好我們這個證書發布機構的證書,不信任我們這個發布機構。
不受信任的證書發布機構的危害
為什麼乙個證書發布機構受不受信任這麼重要?我們舉個例子。假設我們開了乙個狗屁公司來為別人發布證書,並且我和微軟有一腿,微軟在他們的作業系統中把我設定為了受信任的證書發布機構。現在如果有個小公司叫wicrosoft 花了10塊錢讓我為他們公司申請了乙個證書,並且公司慢慢壯大,證書的應用範圍也越來越廣。然後有個奸商的公司js company想冒充wicrosoft,於是給了我¥10000,讓我為他們頒布乙個證書,但是證書的名字(subject)要寫wicrosoft,假如我為了這¥10000,真的把證書給了他們,那麼他們以後就可以使用這個證書來冒充wicrosoft了。
如果是乙個優秀的證書發布機構,比如你要向他申請乙個名字叫wicrosoft的證書,它會讓你提供很多資料證明你確實可以代表wicrosoft這個公司,也就是說他回去核實你的身份。證書發布機構是要為他發布出的證書負法律責任的。
到這裡,你可能會想,***,那我們自己就不能發布證書嗎?就一定要花錢去申請?當然不是,我們自己也可以成立證書發布機構,但是需要通過一些安全認證等等,只是有點麻煩。另外,如果數字證書只是要在公司內部使用,公司可以自己給自己生成乙個證書,在公司的所有機器上把這個證書設定為作業系統信任的證書發布機構的證書(這句話仔細看清楚,有點繞口),這樣以後公司發布的證書在公司內部的所有機器上就可以通過驗證了(在發布證書時,把這些證書的issuer(發布機構)設定為我們自己的證書發布機構的證書的subject(主題)就可以了)。但是這只限於內部應用,因為只有我們公司自己的機器上設定了信任我們自己這個所謂的證書發布機構,而其它機器上並沒有事先信任我們這個證書發布機構,所以在其它機器上,我們發布的證書就無法通過安全驗證。
數字證書原理
概念介紹 對稱加密演算法 加密和解密使用同乙個金鑰。非對稱加密演算法 加密和解密使用的金鑰不是同乙個。典型的如rsa 公鑰加密演算法 擁有一對金鑰,公鑰和私鑰,用私鑰進行解密和數字簽名,用公鈅來進行加密及驗證簽名。encryption 加密 decryption 解密 asymmetric 非對稱 ...
數字證書原理
證書,也叫做數字證書,是網路世界中的 身份證 證書將持有者的身份資訊和公鑰關聯到一起,保證公鑰確實是這個證書持有者的,通過證書就可以確認持有者的身份。證書由權威的 公正的 可信任的第三方機構頒發,我們把證書的頒發機構稱為ca certificate authority 相當於現實生活中的公安局。為什...
數字證書的原理
先說加密。明文p,加上密碼w一混淆之後,變成密文m 如果不知道w,則無法從m反推回p。也就是無法進行解密。類似這種加密方式,稱為對稱加密。也就是加密 解密使用的密碼是一樣的。實際上加解密並不是直接使用密碼,而是經由密碼生成的金鑰。這種演算法有很多,比如aes。另外還有一種神奇的加解密演算法,叫做非對...