PKI 公鑰基礎設施原理與應用

PKI 是什麼

Public Key Infrastructure(PKI),中文叫做公鑰基礎設施,可以理解爲利用公鑰技術爲網絡應用提供加密和數字簽名等密碼服務以及必需的密鑰和證書管理體系。它是一個提供安全服務的基礎設施,PKI 技術是信息安全技術的核心,同時也是電子商務的關鍵和基礎技術。

PKI 的主要目的是發“身份證明書”,網絡上通信時,如果能相互確認身份證明書,就能確定是在跟對的人通信。身份證明書不能私人訂製,需要可信的發證機構來頒發才行,就像派出所給個人發的身份證一樣。

PKI 詳細介紹

PKI 的組成

PKI 是一個標準,下面以最常見的用戶訪問 HTTPS 網站場景來看看PKI 常見組成部分和交互流程。

PKI 組成部分

上圖中有以下組件:

  1. CA 機構:是 PKI 的核心,主要負責數字證書的申請和簽發、已頒發證書的管理,還要負責證書黑名單的登記和發佈。
  2. Web 服務器:如果在 Web 服務器上部署了 HTTPS 域名,那麼就需要去 CA 機構申請該域名匹配的 CA 證書。該證書用於瀏覽器鑑別網站身份、以及實現瀏覽器和網站之間的加密通訊。
  3. 用戶瀏覽器:瀏覽器在訪問使用了 HTTPS 的域名時,會收到 Web 服務器傳來的 CA 證書,瀏覽器需要使用一定的策略來驗證證書的有效性,包括使用根證書來簽證簽名有效性和去 CA 機構查詢該證書是否被撤銷。

核心算法

PKI 標準建立在非對稱密鑰、散列算法的基礎上,什麼是非對稱密鑰呢?什麼是散列算法呢?

介紹非對稱密鑰之前,要先說一下對稱密鑰。對稱密鑰是指加密和解碼使用的是同一個密鑰,常見的對稱加密算法有 DES、3DES、AES。非對稱密鑰在加密是使用一個密鑰,解碼時需要使用另一個密鑰,兩個密鑰是不同的,分別稱爲公鑰和私鑰,大名鼎鼎的 RSA 就是非對稱密鑰了。

非對稱密鑰的公鑰是可以公開的,私鑰不公開。這樣其他用戶使用公鑰加密的數據,只有私鑰擁有者才能解密,在解密的密鑰不需在網絡上傳輸的情況下,實現了機密數據的安全傳輸。

散列算法也叫哈希函數、單向加密,顧名思義經過散列算法加工得到的數據,無法逆向解密得到原始數據。所謂哈希函數是,輸入任意長度的消息,通過一個單向的運算產生一個定長的輸出,這個輸出被稱之爲 Hash 值。因爲長度較短、碰撞較少的特點,經常用來檢驗數據是否被篡改。常見的散列算法有 MD5、SHA-1、SHA256 等。

非對稱密鑰是實現傳輸安全的基礎,散列算法可以用來檢測數據是否被篡改,可以用於身份認證。

CA 機構

作爲 PKI 的核心,CA 機構承擔了一系列重要功能:

  1. 數字證書的頒發
    • 接收、驗證用戶數字證書的申請
    • 證書申請的審批
    • 頒發數字證書、或拒絕證書申請
  2. 處理最終用戶的數字證書更新請求
  3. 數字證書的撤銷
  4. 數字證書的查詢(證書查詢、撤銷查詢)
  5. 數字證書、歷史數據歸檔

一個常見 CA 系統的常見部署結構如下圖所示,包含:

  1. RA 服務器:負責受理證書的申請和審覈。
  2. CA 服務器:負責數字證書的生成、發放,根證書的私鑰可以存放在硬件安全模塊 HSM 中,讓 HSM 來簽發證書,也可以加密後存儲在數據庫中,通過代碼來實現簽發。(當然使用 HSM 更安全)
  3. 目錄服務器:提供數字證書的存儲,以及數字證書和證書撤銷列表(CRL)的查詢。業者有時把它稱爲”LDAP”,這是因爲目錄服務的技術標準遵循LDAP (輕量級目錄訪問協議)的緣故。
  4. CRL/OCSP 服務器:對外提供證書撤銷列表 CRL 下載,以及證書在線狀態的查詢。
  5. 證書查詢:對外提供已頒發證書的查詢。

CA 系統結構

數字證書

爲什麼通過數字證書能夠驗證某個網站的合法性呢?我們先看看數字證書裏有什麼內容,目前所有證書都是按照 ITU-T X.509 國際標準指定的,主要包含以下數據:

  1. 版本號:指出該證書使用了哪種版本的 X.509 標準(版本1、版本2或是版本3),版本號會影響證書中的一些特定信息,目前的版本爲3
  2. 序列號: 標識證書的唯一整數,由證書頒發者分配的本證書的唯一標識符
  3. 簽名算法標識符: 用於簽證書的算法標識,由對象標識符加上相關的參數組成,用於說明本證書所用的數字簽名算法。例如,SHA-1 和RSA 的對象標識符就用來說明該數字簽名是利用 RSA 對 SHA-1 雜湊加密
  4. 認證機構的數字簽名:這是使用發佈者私鑰生成的簽名,以確保這個證書在發放之後沒有被撰改過
  5. 認證機構: 證書頒發者的可識別名(DN),是簽發該證書的實體唯一的 CA 的 X.500 名字。使用該證書意味着信任簽發證書的實體。(注意:在某些情況下,比如根或頂級 CA 證書,發佈者自己簽發證書)
  6. 有效期限: 證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效
  7. 主題信息:證書持有人唯一的標識符(或稱 DN-distinguished name)這個名字在 Internet 上應該是唯一的
  8. 公鑰信息: 包括證書持有人的公鑰、算法(指明密鑰屬於哪種密碼系統)的標識符和其他相關的密鑰參數
  9. 頒發者唯一標識符:標識符—證書頒發者的唯一標識符,僅在版本2和版本3中有要求,屬於可選項
  10. 擴展信息:證書裏還可以添加一些自定義的擴展信息,比如證書撤銷查詢的地址。

證書的有效性檢查需要經歷多個步驟:

  1. 有效期限:校驗當前時間是否在有限期限內。
  2. 數字簽名:該簽名的計算過程是:先使用散列算法生成證書內容的摘要,再使用非對稱加密裏的私鑰加密摘要,便得到了數字簽名。在驗證證書有效性時,首先需要拿到認證機構證書,使用其公鑰解密數字簽名得到證書內容摘要 A,然後使用散列算法計算證書內容摘要 B,兩個摘要進行對比,如果不相等說明證書無效的。
  3. 證書撤銷查詢:前兩步檢查通過後,說明該證書是合法 CA 機構頒發的,但還需要檢查該證書是否已經被撤銷(比如私鑰泄漏的證書必須撤銷)。證書撤銷檢查方法主要有兩種:證書撤銷列表 CRL、在線證書狀態協議 OCSP。

下圖是數字證書的生成和驗證:

數字證書的生成和驗證

下圖顯示了一個證書裏的 CRL、OCSP 地址:

一個例子

在上面的圖中,可以看到 chainnews、RapidSSL、DigiCert 三個證書,他們共同構成了一個證書鏈:chainnews 由 RapidSSL 簽發、RapidSSL 由 DigiCert 簽發,其中 DigiCert 是根證書、RapidSSL 是二級證書。同理,在驗證證書籤名時,使用 RapidSSL 驗證 chainnews,再使用根證書驗證 RapidSSL。驗證的終點是根證書,根證書是自籤的,那如何保證根證書的合法性呢?一般在安裝瀏覽器的時候,就內置了可信任的根證書。

證書鏈

證書撤銷機制

常見的證書撤銷機制有 CRL、OCSP、OCSP Stapling。

CRL 全稱是證書撤銷列表 Certificate Revocation Lists,CA 機構會定期更新發布撤銷證書列表,CRL 分佈在公共可用的存儲庫中,瀏覽器可以在驗證證書時獲取並查閱 CA 的最新 CRL。該方法的缺陷有兩個:一是撤銷的時間粒度受限於 CRL 發佈週期,二是 CRL 文件包含的撤銷證書較多時文件會很大。

OCSP 全稱是在線證書狀態協議 Online Certificate Status Protocol,瀏覽器從在線 OCSP 服務器(也稱爲OCSP Response Server)請求證書的撤銷狀態,OCSP Server 予以響應。這種方法避免 CRL 更新延遲問題,但是每次驗證證書都要請求 OCSP Server 嚴重影響性能。

OCSP Stapling 是對 OCSP 的一個改進。OCSP Server 通常離用戶較遠,查詢耗時可能很長。一個改進思路是將通過 OCSP Server 獲取證書吊銷狀況的過程交給 Web 服務器來做,Web 服務器不光可以直接查詢 OCSP 信息,規避網絡訪問限制、OCSP 服務器離用戶的物理距離較遠等問題,還可以將查詢響應緩存起來,給其他瀏覽器使用。由於 OCSP 的響應也是具備 CA RSA 私鑰簽名的,所以不用擔心僞造問題。

應用:訪問控制

PKI 提供了一套身份認證、安全傳輸的機制,最常見的應用就是各種 HTTPS 網站了。通過給合法的 HTTPS 域名頒發 CA 證書,瀏覽器便可以通過驗證 CA 證書的有效性來確認所訪問網站的真僞。

PKI 還可以用於服務器的訪問權限控制,HTTPS 域名的認證是單向的,只有瀏覽器客戶端對網站的認證,反過來如果給允許訪問服務器的客戶端都發一份證書,在客戶端訪問服務器時,服務器對客戶端證書進行驗證,即可起到訪問控制的作用。

雙向認證

參考資料

  1. 對稱密碼、非對稱密碼、散列算法與 PKI
  2. PKI 的核心 CA
  3. Security-CA & chain of trust
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章