PKI 公開金鑰基礎架構原理

PKI Fundamentals - Public Key Infrastructure

PKI(Public Key Infrastructure,公開金鑰基礎架構)是一套用於建立、管理、分發、使用、儲存和撤銷數位憑證的系統。它是現代網路安全通訊的基石,支撐著 HTTPS、電子郵件加密、程式碼簽章等眾多安全應用。

PKI 基本概念

什麼是 PKI?

PKI 是一個包含硬體、軟體、人員、政策和程序的完整體系,用於建立、管理、儲存、分發和撤銷基於公開金鑰密碼學的數位憑證。PKI 的核心目的是解決以下問題:

  • 身份驗證:確認通訊對象的真實身份
  • 資料完整性:確保資料在傳輸過程中未被篡改
  • 不可否認性:防止發送方否認曾經發送過的訊息
  • 機密性:保護敏感資訊不被未授權者存取

公開金鑰密碼學基礎

PKI 建立在非對稱加密(Asymmetric Cryptography)的基礎上。每個實體擁有一對金鑰:

1
2
3
4
5
6
7
8
9
+------------------+     +------------------+
|    公開金鑰      |     |    私密金鑰      |
|  (Public Key)    |     |  (Private Key)   |
+------------------+     +------------------+
        |                        |
        v                        v
   可以公開分享              必須嚴格保密
   用於加密資料              用於解密資料
   用於驗證簽章              用於產生簽章

PKI 組成元件

憑證授權中心(CA, Certificate Authority)

CA 是 PKI 架構中最核心的元件,負責:

  • 簽發憑證:驗證申請者身份後,簽發數位憑證
  • 管理憑證:維護已簽發憑證的記錄
  • 撤銷憑證:當憑證不再可信時,將其撤銷
  • 發布 CRL:定期發布憑證撤銷清單(Certificate Revocation List)

CA 的層級結構:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
                    +------------------+
                    |    根 CA         |
                    | (Root CA)        |
                    +--------+---------+
                             |
              +--------------+--------------+
              |                             |
     +--------v---------+         +--------v---------+
     |   中繼 CA        |         |   中繼 CA        |
     | (Intermediate CA)|         | (Intermediate CA)|
     +--------+---------+         +--------+---------+
              |                             |
     +--------v---------+         +--------v---------+
     |  終端實體憑證    |         |  終端實體憑證    |
     | (End Entity Cert)|         | (End Entity Cert)|
     +------------------+         +------------------+

註冊授權中心(RA, Registration Authority)

RA 是 CA 的延伸,主要職責包括:

  • 身份驗證:確認憑證申請者的身份
  • 接收申請:收集並審核憑證申請
  • 核准請求:將已驗證的申請轉交給 CA 處理
  • 憑證撤銷請求處理:接收並處理撤銷申請

RA 的存在使 CA 可以專注於憑證的簽發工作,提高整體系統的安全性和效率。

憑證儲存庫(Certificate Repository)

用於儲存和分發憑證及 CRL 的資料庫,通常採用:

  • LDAP 目錄服務:輕量級目錄存取協定
  • HTTP/HTTPS 伺服器:網頁伺服器分發
  • 資料庫系統:關聯式資料庫儲存

憑證結構

X.509 憑證格式

X.509 是最廣泛使用的數位憑證標準,其結構包含:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+-----------------------------------------------+
|              X.509 憑證結構                    |
+-----------------------------------------------+
| 版本 (Version)                                |
| 序號 (Serial Number)                          |
| 簽章演算法識別碼 (Signature Algorithm ID)     |
| 發行者名稱 (Issuer Name)                      |
| 有效期間 (Validity Period)                    |
|   - 生效日期 (Not Before)                     |
|   - 到期日期 (Not After)                      |
| 主體名稱 (Subject Name)                       |
| 主體公開金鑰資訊 (Subject Public Key Info)    |
|   - 演算法 (Algorithm)                        |
|   - 公開金鑰 (Public Key)                     |
| 擴充欄位 (Extensions) [v3]                    |
|   - 金鑰用途 (Key Usage)                      |
|   - 主體別名 (Subject Alternative Name)       |
|   - 基本約束 (Basic Constraints)              |
|   - CRL 發布點 (CRL Distribution Points)      |
|   - 授權資訊存取 (Authority Info Access)      |
+-----------------------------------------------+
| 簽章演算法 (Signature Algorithm)              |
| 數位簽章 (Digital Signature)                  |
+-----------------------------------------------+

使用 OpenSSL 檢視憑證

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 檢視 PEM 格式憑證
openssl x509 -in certificate.crt -text -noout

# 檢視 DER 格式憑證
openssl x509 -in certificate.der -inform DER -text -noout

# 僅顯示主體名稱
openssl x509 -in certificate.crt -subject -noout

# 顯示憑證有效期間
openssl x509 -in certificate.crt -dates -noout

常見憑證欄位說明

欄位說明
CN (Common Name)一般名稱,通常為網域名稱
O (Organization)組織名稱
OU (Organizational Unit)組織單位
L (Locality)城市或地區
ST (State)州或省份
C (Country)國家代碼

信任鏈(Chain of Trust)

信任鏈的概念

信任鏈是從終端實體憑證追溯到受信任根憑證的路徑。每個憑證都由其上層 CA 簽發,形成一條完整的信任鏈。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
驗證流程:

+------------------+
| 終端實體憑證     |  <-- 由中繼 CA 簽發
+--------+---------+
         | 驗證簽章
         v
+------------------+
| 中繼 CA 憑證     |  <-- 由根 CA 簽發
+--------+---------+
         | 驗證簽章
         v
+------------------+
| 根 CA 憑證       |  <-- 自簽憑證,預先安裝於系統
+------------------+
         |
         v
    信任錨點 (Trust Anchor)

信任鏈驗證

當瀏覽器或應用程式收到憑證時,會進行以下驗證:

  1. 憑證完整性:驗證憑證的數位簽章
  2. 有效期限:確認憑證在有效期間內
  3. 撤銷狀態:檢查憑證是否已被撤銷(透過 CRL 或 OCSP)
  4. 信任鏈:追溯至受信任的根憑證
  5. 主體名稱:確認憑證主體與預期相符

使用 OpenSSL 驗證信任鏈

1
2
3
4
5
6
7
8
# 驗證憑證鏈
openssl verify -CAfile ca-bundle.crt certificate.crt

# 顯示完整憑證鏈
openssl s_client -connect example.com:443 -showcerts

# 驗證特定憑證與 CA
openssl verify -verbose -CAfile rootCA.crt -untrusted intermediateCA.crt server.crt

憑證生命週期

1. 金鑰產生(Key Generation)

1
2
3
4
5
6
7
8
# 產生 RSA 私密金鑰(2048 位元)
openssl genrsa -out private.key 2048

# 產生 RSA 私密金鑰(4096 位元,包含密碼保護)
openssl genrsa -aes256 -out private.key 4096

# 產生 ECDSA 私密金鑰
openssl ecparam -genkey -name prime256v1 -out private.key

2. 憑證簽發請求(CSR, Certificate Signing Request)

1
2
3
4
5
# 產生 CSR
openssl req -new -key private.key -out request.csr

# 檢視 CSR 內容
openssl req -in request.csr -text -noout

CSR 包含的資訊:

  • 公開金鑰
  • 主體識別名稱(DN)
  • 簽章演算法
  • 申請者的數位簽章

3. 憑證簽發(Certificate Issuance)

CA 驗證 CSR 後簽發憑證:

1
2
3
# CA 簽發憑證
openssl x509 -req -in request.csr -CA rootCA.crt -CAkey rootCA.key \
    -CAcreateserial -out certificate.crt -days 365 -sha256

4. 憑證使用(Certificate Usage)

憑證可用於多種用途:

  • 伺服器驗證:SSL/TLS 伺服器憑證
  • 用戶端驗證:SSL/TLS 用戶端憑證
  • 程式碼簽章:軟體和程式碼的數位簽章
  • 電子郵件:S/MIME 郵件加密和簽章
  • 文件簽章:PDF 等文件的數位簽章

5. 憑證更新(Certificate Renewal)

憑證到期前需要更新:

1
2
3
4
5
# 檢查憑證到期日
openssl x509 -in certificate.crt -enddate -noout

# 產生新的 CSR 進行更新
openssl req -new -key private.key -out renewal.csr

6. 憑證撤銷(Certificate Revocation)

當憑證不再可信時需要撤銷:

撤銷原因:

  • 私密金鑰洩露或疑似洩露
  • CA 被入侵
  • 憑證資訊變更
  • 憑證持有者不再有權使用

撤銷機制:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
+------------------+     +------------------+
|       CRL        |     |      OCSP        |
| (Certificate     |     | (Online          |
|  Revocation List)|     |  Certificate     |
|                  |     |  Status Protocol)|
+------------------+     +------------------+
        |                        |
        v                        v
  定期發布的清單            即時查詢狀態
  檔案可能較大              回應快速
  可能有延遲                需要線上服務
1
2
3
4
5
6
7
8
9
# 撤銷憑證
openssl ca -revoke certificate.crt -keyfile rootCA.key -cert rootCA.crt

# 產生 CRL
openssl ca -gencrl -keyfile rootCA.key -cert rootCA.crt -out crl.pem

# OCSP 查詢
openssl ocsp -issuer rootCA.crt -cert certificate.crt \
    -url http://ocsp.example.com -resp_text

實務應用

建立簡單的 PKI 環境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 建立目錄結構
mkdir -p ~/pki/{root-ca,intermediate-ca,certs,crl}
cd ~/pki

# 2. 產生根 CA 金鑰和憑證
openssl genrsa -aes256 -out root-ca/rootCA.key 4096
openssl req -x509 -new -nodes -key root-ca/rootCA.key \
    -sha256 -days 3650 -out root-ca/rootCA.crt \
    -subj "/C=TW/ST=Taiwan/L=Taipei/O=Example Corp/CN=Root CA"

# 3. 產生中繼 CA 金鑰和 CSR
openssl genrsa -out intermediate-ca/intermediateCA.key 4096
openssl req -new -key intermediate-ca/intermediateCA.key \
    -out intermediate-ca/intermediateCA.csr \
    -subj "/C=TW/ST=Taiwan/L=Taipei/O=Example Corp/CN=Intermediate CA"

# 4. 使用根 CA 簽發中繼 CA 憑證
openssl x509 -req -in intermediate-ca/intermediateCA.csr \
    -CA root-ca/rootCA.crt -CAkey root-ca/rootCA.key \
    -CAcreateserial -out intermediate-ca/intermediateCA.crt \
    -days 1825 -sha256

總結

PKI 是現代網路安全的基礎架構,透過數位憑證和公開金鑰密碼學,提供了身份驗證、資料完整性和機密性保護。了解 PKI 的組成元件、憑證結構、信任鏈和憑證生命週期,對於建立和維護安全的網路環境至關重要。

重點回顧:

  • CA 負責簽發和管理憑證
  • RA 負責驗證申請者身份
  • X.509 是最常用的憑證格式
  • 信任鏈 確保憑證的可信度
  • 憑證生命週期 包含產生、簽發、使用、更新和撤銷

延伸閱讀

參考資料

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy