X.509證書認證模式簡介
1 非對稱密碼學(Asymmetric Cryptography)
站在訊息交換的角度,密碼學就是幫助我們實現對整個訊息或者對訊息的某個部分進行 數字簽名和加密
的理論和方法
數字簽名和加密依賴於相應的加密演算法(Cryptographic Algorithm)
從數學的角度來講,加密演算法是就是將被加密的資料和金鑰作為自變數,將加密後的資料作為因變數的函式
與加密相對的操作是解密
按照加密和解密採用的金鑰是否相同,我們將加密演算法分為
-
對稱加密演算法
採用相同的金鑰進行加密和解密 -
非對稱加密演算法
採用一組相互配對的金鑰分別進行加密和解密。
對於非對稱加密,我們選擇金鑰對中某一個金鑰對訊息進行加密,該密文只有通過另一個金鑰方能解密
非對稱密碼學具有兩個主要的應用
- 直接通過對訊息進行加密解決機密性問題
- 通過數字簽名實現身份認證和資料一致性的問題
1.1 訊息加密(Encryption)
非對稱加密依賴一組由公鑰/私鑰(Public Key /Private Key)組成的金鑰對,所以採用非對稱加密又被稱為公鑰加密(Public Key Cryptography)
公鑰和私鑰均可以用於加密。如果金鑰對中的其中一個用於加密,另一個則用於解密
- 公鑰公諸於眾,不具有隱私性,任何人均可以獲取
- 私鑰專屬於擁有該金鑰對的實體,屬於絕對隱私
對於訊息交換來說,通過非對稱的方式對訊息進行加密能夠 確保訊息的機密性
-
具體的做法
訊息傳送方採用接收方的公鑰進行加密,接收方通過自己的私鑰進行解密
私鑰僅供接收方所有
,所有其他人不能對密文進行解密
1.2 數字簽名(Digital Signature)
包括兩項主要的工作,簽名(Signing)和檢驗(Verification),前者建立一個數字簽名,後者驗證簽名的有效性

簽名的過程
- 首先,傳送方首先採用某種演算法對整個訊息的內容實施雜湊計算,得到一個雜湊碼
- 然後,傳送方使用自己的私鑰對該雜湊碼就行加密,加密後得到的密文就是數字簽名
該數字簽名最終會連同傳送方金鑰對中的公鑰(一般會內嵌在一個數字證書中)附加到原訊息上一併發給接收方
這三項被接收方接收後,它就可以藉助這個數字簽名驗證傳送方的真實身份和訊息的完整性,這個過程被稱為 數字簽名的驗證

數字簽名的檢驗流程
- 首先,原訊息被提取出來,通過相同的雜湊演算法得到一個雜湊碼
- 然後,數字簽名被提取出來,採用相同的演算法利用公鑰對數字簽名進行解密,得到生成數字簽名的那個雜湊碼。兩個雜湊碼進行比較,如果一致則可以證明數字簽名的有效性以及訊息本身的完整性。
採用非對稱密碼學對訊息加密解決的是 訊息的機密性問題
數字簽名的作用
身份認證(Authentication)
數字證書可以幫助我們 驗證訊息傳送源的真實身份
,因為數字簽名的內容是由一個私鑰決定的,傳送方只有通過專屬於它的金鑰對中的私鑰生成數字簽名,採用通過對方利用公鑰實施的數字簽名檢驗
私鑰是屬於擁有者的私密資訊,不對外公開。對數字證書的檢驗實際上就是確認訊息的傳送源是否是私鑰的真正擁有者
防止抵賴(Non-repudiation)
防止抵賴在這裡的代表對於接收到的經過數字簽名的訊息
如果接收方採用某個實體的公鑰對數字簽名檢驗成功,那麼這個實體就是訊息的傳送方,不容對方抵賴
因為能夠通過公鑰對某個數字簽名成功檢驗,就證明生成該數字簽名使用的是正確的私鑰
訊息一致性(Integrity)
最初被用於私鑰加密的雜湊碼是針對整個訊息的內容進行雜湊計算獲得的。訊息的內容一旦出現任何的改變,最終對數字簽名的檢驗都將失敗。
在上面介紹數字簽名的流程時,我們說傳送方的公鑰會連同生成的數字簽名會附加到訊息中,一併傳送給接收方,以輔助接收方對傳送進行身份驗證
實際上,這個公鑰在一般情況下是通過數字證書的形式進行傳遞的。數字證實在這裡作為傳送方的憑證,現在我們就來簡單介紹一下數字證書。
2 數字證書
證書,又稱數字證書(Digital Certificate)或者公鑰證書(Public Key Certificate),一種數字簽名的宣告,它將公鑰的值繫結到持有對應私鑰的個人、裝置或服務的標識
由於大多數普通用途的證書基於 X.509 V3 證書標準,所以我們又將其稱為X.509證書
X.509證書廣泛地被應用於加密(Encryption)和數字簽名(Digital Signature),以提供
認證的實現和確保資料的一致性(Integrity)和機密性(Confidentiality)
下面的程式碼片斷體現了一個X.509證書的大體結構
- 公鑰(00:b4:31:98:... 52:7e:41:8f)
- 公鑰演算法(rsaEncryption)
- 頒發者的數字簽名(93:5f:8f:5f:... b5:22:68:9f)

2.1 數字證書的頒發機制
數字證書在大部分場景中是作為 證明某個實體身份的憑證
被使用,而證書的主題部分的內容代表了該使用者憑證所代表的身份
那麼我們的第一個問題是,我們為什麼要信任這個證書?
比如居民身份證就是一種典型的證書,它的一個重要的特徵就是該證書是由官方認可的合法機構頒發,一般情況下身份證的辦理機構就是戶口所在地的公安機關
對於數字證書,尤其是用於商業用途的數字證書,也具有相應的官方辦法機構,我們將這樣的機構稱之為認證權威機構(CA:Certification Authority)
我們熟悉的CA包括VeriSign、Thawte(OpenSSL)等
證書的頒發機構體系是一個樹形結構,每一個CA可以具有一到多個子CA,最上層的CA被稱為根CA。
在日常生活中,人們對居民身份證的普遍認可來源於對頒發機構,即戶口所在地的公安機關的信任。這種基於對頒發機構認可的方式同樣適合對數字證書。在一般情況下,認證方通過檢驗數字證書的CA的信任程度而作出對證書合法性的判斷。
不過,現在的問題是:居民身份證具有若干防偽標識幫助認證方鑑別真偽,對於數字證書來說,我們採用怎樣的方式來判斷它是不是偽造的呢?驗證數字證書的有效性,需要防止以下兩種情況:
- 使用者偽造一個證書以假冒與證書公鑰繫結的那個身份,並且該證書具有一個我們普遍認可的CA
- 使用者對CA頒發的證書進行篡改,改變公鑰或者其他身份資訊
這兩個問題都可以通過數字簽名技術來解決
從上面給出的數字證書我們知道,證書中不僅僅包括CA的基本資訊,還包括一個數字簽名和簽名採用的演算法
CA通過自己的私鑰對證書的資料部分進行簽名,並將此簽名連同簽名採用的演算法置於證書之中
如果我們具有CA的公鑰,我們不僅僅可以驗證證書的CA,也能校驗證書的內容是否被篡改。那麼在對證書進行驗證的時候,CA的公鑰從何而來呢?
實際上,CA的公鑰也儲存在一個數字證書之中,並被儲存於一個受信任的證書儲存之中
按照證書代表身份的不同,我們可以將其分為兩種型別
- CA證書(CA Certificate)
代表CA - 終端實體證書(End Entity Certificate)
代表接受CA證書的最終實體
實際上,CA證書和終端實體證書並沒有本質的區別。除了最頂層的根CA,所有的CA證書頒發者是它的上一級CA,即上級的CA作為該CA證書的CA。CA的這種層級關係組成了一種信任鏈(Trust Chain)
在若干證書儲存區中,有一個被稱為“受信任的根證書頒發機構”(Trusted Root Certification Authorities)的儲存區,它裡面儲存的所有CA證書代表所信任的證書頒發機構。在預設情況下,對於一個待驗證的證書,如果基於該證書CA信任鏈上的任何一個CA在該儲存區中存在一個證書,那麼這個證書是合法的。
3 通過憑證三個屬性來分析X.509證書
採用使用者憑證的三個屬性來分析數字證書。
- 憑證與申明的一致性: 證書的申明反映在於公鑰繫結的於主題相關的資訊
- 持有人對憑證的擁有性: 在絕大部分的認證過程中,都需要被認證方提供的數字證書具有相應的私鑰。私鑰的私有性在某種程度上證明了數字證書持有者就是該證書的擁有者
- 證書的合法性: 這可以通過頒發者對證書的數字簽名來驗證
如果被認證方通過一個數字證書作為使用者憑證,認證方一般採用信任鏈(Trust Chain)模式對其實施認證。在該模式下,認證方從數字證書的直接頒發機構向上追溯,如果具有任何一個頒發機構是受信任的,那麼認證成功。不過,有時我們還是會採用其他的認證模式,比如嚴格比較證書主題資訊甚至是序列號。
對於WCF來說,不僅僅客戶端可以將數字證書作為證明自己身份的憑證,提供給服務端對自己進行認證。也可以將服務和某個數字證書繫結起來,通過證書代表服務的身份,供客戶端進行驗證。總之,數字證書在WCF中具有十分廣泛的應用。