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)
|
信任鏈驗證
當瀏覽器或應用程式收到憑證時,會進行以下驗證:
- 憑證完整性:驗證憑證的數位簽章
- 有效期限:確認憑證在有效期間內
- 撤銷狀態:檢查憑證是否已被撤銷(透過 CRL 或 OCSP)
- 信任鏈:追溯至受信任的根憑證
- 主體名稱:確認憑證主體與預期相符
使用 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 是最常用的憑證格式
- 信任鏈 確保憑證的可信度
- 憑證生命週期 包含產生、簽發、使用、更新和撤銷
延伸閱讀
參考資料