1.數(shù)字證書是什么?
數(shù)字證書(digital certificate)是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),提供了驗(yàn)證身份的方式。
它是由一個(gè)由權(quán)威機(jī)構(gòu)(Certificate Authority)中心發(fā)行的,人們可以在網(wǎng)上用它來識(shí)別對(duì)方的身份。
最簡(jiǎn)單的數(shù)字證書包含一個(gè)公開密鑰、名稱以及證書授權(quán)中心的數(shù)字簽名。
2.常見的3種加密方式
為了了解數(shù)字證書的原理,首先需要了解已下3種加密方式。
2.1 hash算法加密
它是一種不可逆的加密方式,對(duì)一組數(shù)據(jù)使用哈希算法加密,加密后不能解密。
把必要的信息放到一起后,一般會(huì)用MD5或SHA1算法計(jì)算出hash值(也叫信息摘要:MD5為128位,SHA1主要為256位)。
將信息的摘要也稱作信息的指紋。相同的信息一定會(huì)得相同的指紋,而僅通過指紋又無法還原出原始信息。
2.2 對(duì)稱密鑰加密
加密一組數(shù)據(jù)時(shí)使用【秘鑰】加密,解密時(shí)候也使用同樣的【秘鑰】解密。
目前的對(duì)稱密鑰算法有DES、3DES、AES等,而密鑰則一般是一串固定長(zhǎng)度的字符。
2.3 非對(duì)稱密鑰加密
將秘鑰分成【公鑰publicKey】和【私鑰privateKey】。
公鑰加密的內(nèi)容,使用私鑰可以解開;而私鑰加密的內(nèi)容,公鑰可以解開。
單獨(dú)的知道公鑰或私鑰,卻沒有辦法推出另一份密鑰。
目前使用最為廣泛的非對(duì)稱密鑰為RSA算法。
這3種加密方式如果不太理解的話,可以自行在搜一搜相關(guān)資料看看。
下面我們看看數(shù)據(jù)證書是如何發(fā)放的。
3.發(fā)放數(shù)字證書
看看下圖CA是如何發(fā)放數(shù)字證書。

1. 創(chuàng)建一個(gè)文件包含申請(qǐng)者信息(申請(qǐng)者的公鑰,簽名算法,有效期等等...)的文件。
2. 對(duì)這個(gè)文件使用hash算法加密,獲取hash值。
3. CA使用自己的私鑰加密申請(qǐng)信息的hash值獲取證書簽名。
4. 證書簽名+申請(qǐng)者信息 = 數(shù)字證書
4.驗(yàn)證數(shù)字證書的合法性
看下圖如何判斷數(shù)字證書的合法性。

1. 先把數(shù)字證書里的申請(qǐng)者信息使用hash算法加密獲得hash值。
2. 使用CA頒發(fā)的公鑰解密數(shù)字證書里的簽名。
3. 比較數(shù)字證書里的內(nèi)容獲得的hash值和解密簽名獲取的hash值是否一樣。
5.數(shù)據(jù)證書里的詳細(xì)內(nèi)容
最后整理了數(shù)字證書的詳細(xì)內(nèi)容和說明。

| 版本: | 指定所編碼證書的版本號(hào)。 當(dāng)前,此字段的可能值為 0、1 或 2。 |
| 序列號(hào): | 包含證書頒發(fā)機(jī)構(gòu) (CA) 分配給證書的一個(gè)唯一正整數(shù)。 |
| 簽名算法: | 包含一個(gè)對(duì)象標(biāo)識(shí)符 (OID),指定 CA 用于對(duì)證書進(jìn)行簽名的算法。 |
| 簽名哈希算法: | 生成簽名使用的哈希算法。 |
| 頒發(fā)者: | 包含創(chuàng)建和簽名證書的 CA 的 X.500 可分辨名稱 (DN)。 |
| 有效期: | 指定證書有效的時(shí)間間隔。 |
| 使用者: | 包含實(shí)體的 X.500 可分辨名稱,該實(shí)體與證書中包含的公鑰相關(guān)聯(lián)。 |
| 公鑰: | 包含公鑰和關(guān)聯(lián)的算法信息。 |
| 授權(quán)密鑰標(biāo)識(shí)符: | 標(biāo)識(shí)證書頒發(fā)機(jī)構(gòu) (CA) 公鑰,與用于簽署證書的 CA 私鑰對(duì)應(yīng)。 |
| 基本約束: | 指定實(shí)體是否可用作 CA,如果可以,則指定在證書鏈中該 CA 下可以存在的從屬 CA 的數(shù)量。 |
| 證書策略: | 指定頒發(fā)證書的策略和使用證書的目的。 |
| CRL: | 分發(fā)點(diǎn) 包含基本證書吊銷列表 (CRL) 的 URI。 |
| 增強(qiáng)型密鑰用法: | 指定證書中包含的公鑰的使用方式。 |
| 頒發(fā)者備用名稱: | 為證書請(qǐng)求頒發(fā)者指定一個(gè)或多個(gè)備用名稱形式。 |
| 密鑰用法: | 指定證書中包含的公鑰可以執(zhí)行的操作的限制。 |
| 名稱約束: | 指定證書層次結(jié)構(gòu)中所有使用者名稱必須位于的命名空間。 擴(kuò)展僅在 CA 證書中使用。 |
| 策略約束: | 通過禁止策略映射或通過要求層次結(jié)構(gòu)中的每個(gè)證書包含一個(gè)可接受的策略標(biāo)識(shí)符來約束路徑驗(yàn)證。 擴(kuò)展僅在 CA 證書中使用。 |
| 策略映射: | 指定與發(fā)證 CA 中的策略對(duì)應(yīng)的從屬 CA 中的策略。 |
| 私鑰使用周期: | 為私鑰指定與私鑰關(guān)聯(lián)的證書不同的驗(yàn)證周期。 |
| 使用者可選名稱: | 為證書請(qǐng)求使用者指定一個(gè)或多個(gè)備用名稱形式。 示例備用形式包括電子郵件地址、DNS 名稱、IP 地址和 URI。 |
| 使用目錄屬性: | 傳達(dá)標(biāo)識(shí)屬性,如證書使用者的國(guó)籍。 擴(kuò)展值是 OID 值對(duì)序列。 |
| 使用者密鑰標(biāo)識(shí)符: | 區(qū)分證書使用者持有的多個(gè)公鑰。 擴(kuò)展值一般是密鑰的 SHA-1 哈希。 |
歡迎大家的意見和交流
email: li_mingxie@163.com