數字證書原理


https://blog.cnbluebox.com/blog/2014/03/24/shu-zi-zheng-shu/

 

上一篇博客講到了RSA加密算法,這里就寫一下RSA應用最廣泛的-數字證書。數字證書的作用就是在數據傳輸的過程中證明用戶的身份,保證用戶不是偽裝的。

為什么需要數字證書

假設一個正常的非對稱加密通信如下:

1

現在假設有個黑客Sam獲取了Cass的公鑰,並偽裝成Dean, 是完全可能的。那么就需要一種驗證用戶身份的機制,那就是數字證書。

數字證書標准

1、X.509版本號:指出該證書使用了哪種版本的X.509標准,版本號會影響證書中的一些特定信息。目前的版本是3。

2、證書持有人的公鑰:包括證書持有人的公鑰、算法(指明密鑰屬於哪種密碼系統)的標識符和其他相關的密鑰參數。

3、證書的序列號:由CA給予每一個證書分配的唯一的數字型編號,當證書被取消時,實際上是將此證書序列號放入由CA簽發的CRL(Certificate Revocation List證書作廢表,或證書黑名單表)中。這也是序列號唯一的原因。

4、主題信息:證書持有人唯一的標識符(或稱DN-distinguished name)這個名字在 Internet上應該是唯一的。DN由許多部分組成,看起來象這樣:

CN=Bob Allen, OU=Total Network Security Division

O=Network Associates, Inc.

C=US

這些信息指出該科目的通用名、組織單位、組織和國家或者證書持有人的姓名、服務處所等信息。

5、證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。

6、認證機構:證書發布者,是簽發該證書的實體唯一的CA的X.500名字。使用該證書意味着信任簽發證書的實體。(注意:在某些情況下,比如根或頂級CA證書,發布者自己簽發證書)

7、發布者的數字簽名:這是使用發布者私鑰生成的簽名,以確保這個證書在發放之后沒有被撰改過。

8、簽名算法標識符:用來指定CA簽署證書時所使用的簽名算法。算法標識符用來指定CA簽發證書時所使用的公開密鑰算法和HASH算法。

下面是截取了github的ssl證書的截圖:

2 3 4

數字證書的頒發過程

先上個圖吧: 5

圖中給出了基本的證書申請流程,這個流程一般體現的場景如:網頁服務器從CA請求SSL證書用於https加密; 像蘋果服務器請求開發者證書。

CA與系統根證書

可能大家經常要聽到CA這個詞,那什么是CA呢,CA就是上圖中的證書頒發機構,因為證書頒發機構關系到所有互聯網通信的身份安全,因此一定要是一個非常權威的機構。所以這樣的專門管理和頒發證書的機構就是CA機構。

CA證書可以具有層級結構,CA建立自上而下的信任鏈,下級CA信任上級CA,下級CA由上級CA頒發證書並認證。 如:6

如果說CA保證互聯網交易安全的根本保證,那么系統根證書就是個人PC安全的根本保證。系統根證書里保存了受信任的CA證書的根證書,用戶驗證一個數字證書的正確性都是從系統根證書開始的。

如上圖中: google.com.hk的ssl證書由 Google Internet Authority G2這個CA來驗證。而Google Internet Authority G2由 GeoTrust Global CA來驗證; GeoTrust Global CA由系統根證書Equifax Secure Certificate Authority來驗證。

如何查看系統根證書 在mac系統的keychain中直接就可以查看了,在windows系統中在開始的搜索中直接鍵入:certmgr.msc,就可以打開證書查看器 如果系統根證書被篡改,系統的安全性就受到威脅

所以,不要輕易的信任根證書,除非你是開發者,了解自己的所作所為

HTTPS加密過程

話不多說,先上一幅圖:

7

由上可以看出https協議是很安全的,谷歌公司已經大力推廣HTTPS的使用。

但是前提是不要輕易信任不明發布源的數字證書,不要改動系統根證書。在ASIHttpRequest中提供了一個屬性:validatesSecureCertificate,當設置其位NO時,可以忽略對數字證書進行有效性驗證。這樣做是不安全的,因此建議我們平時在測試時可以將其設置為NO,但發布時最好還是設置為YES.

下面即將講到一種監察的情況。

為什么Fiddler可以抓https的數據包

如果你使用過Fiddler進行過網絡抓包調試,應該發現Fiddler是可以抓取https網絡請求的數據包的,以前我也有過疑惑,如果https這么容易就被Fiddler這樣的工具截取到數據,那么還有什么安全性可言呢,還要https協議干嘛呢。但其實不然,https還是很安全的。下面就解釋下為何Fiddler可以抓https的包。

Fiddler對服務端充當客戶端,對客戶端充當服務端,並頒發證書給不同的domain 8

但是Fidder不是正規的CA證書,它頒發的證書不受瀏覽器信任的,所以如果你的網絡正被Fiddler這樣的Middle Men監控着,那么https接請求都會報證書不受信任的,像這樣: 9。但是如果代碼中忽略了https中ssl證書合法性的驗證,那么https的安全性就相當於沒有了。所以不要把ASIHttpRequest中的validatesSecureCertificate屬性單純的設置為NO.

這篇博客先到這里吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM