企業級 PKI(Public Key Infrastructure)架構是組織建立安全數位身份驗證和加密通訊的核心基礎設施。本文將深入探討如何設計和部署一套符合企業需求的 PKI 系統,涵蓋架構層級、安全措施、憑證管理和合規要求等關鍵面向。
企業 PKI 概述
為什麼需要企業級 PKI?
企業級 PKI 提供了集中化的憑證管理能力,相較於依賴外部公開 CA,自建 PKI 具有以下優勢:
- 成本控制:大量內部憑證需求時可大幅降低成本
- 彈性管理:可依企業政策自訂憑證生命週期和用途
- 內部整合:與 Active Directory、LDAP 等目錄服務深度整合
- 合規需求:滿足特定產業法規對憑證管理的要求
- 安全控制:完全掌控金鑰和憑證的產生與儲存
企業 PKI 應用場景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| +------------------------------------------------------------------+
| 企業 PKI 應用場景 |
+------------------------------------------------------------------+
| |
| +------------------+ +------------------+ +------------------+ |
| | 內部網站 SSL | | VPN 認證 | | WiFi 802.1X | |
| | 憑證 | | 憑證 | | 憑證 | |
| +------------------+ +------------------+ +------------------+ |
| |
| +------------------+ +------------------+ +------------------+ |
| | 程式碼簽章 | | 電子郵件 | | 智慧卡登入 | |
| | 憑證 | | S/MIME 憑證 | | 憑證 | |
| +------------------+ +------------------+ +------------------+ |
| |
| +------------------+ +------------------+ +------------------+ |
| | 設備認證 | | 文件簽章 | | API 認證 | |
| | 憑證 | | 憑證 | | mTLS 憑證 | |
| +------------------+ +------------------+ +------------------+ |
| |
+------------------------------------------------------------------+
|
PKI 架構層級
階層式 CA 架構設計
企業級 PKI 通常採用多層式架構,以平衡安全性和可用性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| +----------------------+
| Root CA |
| (離線/氣隙隔離) |
| 有效期: 20-25 年 |
+----------+-----------+
|
+--------------+--------------+
| |
+---------v---------+ +---------v---------+
| Policy CA | | Policy CA |
| (選用層級) | | (選用層級) |
| 有效期: 10 年 | | 有效期: 10 年 |
+---------+---------+ +---------+---------+
| |
+-----------+-----------+ +-----------+-----------+
| | | |
+-------v-------+ +-------v-------+ +-------v-------+
| Issuing CA | | Issuing CA | | Issuing CA |
| (線上發證) | | (線上發證) | | (線上發證) |
| 有效期: 5 年 | | 有效期: 5 年 | | 有效期: 5 年 |
+---------------+ +---------------+ +---------------+
| | |
v v v
使用者憑證 伺服器憑證 設備憑證
|
兩層式 vs 三層式架構
| 特性 | 兩層式架構 | 三層式架構 |
|---|
| 複雜度 | 較低 | 較高 |
| 適用規模 | 中小型企業 | 大型企業 |
| 彈性 | 一般 | 較高 |
| 管理成本 | 較低 | 較高 |
| 安全性 | 良好 | 最佳 |
離線 Root CA 設計
離線 Root CA 的重要性
Root CA 是整個 PKI 信任鏈的根基,一旦 Root CA 的私鑰洩露,整個 PKI 架構將完全失效。因此,Root CA 必須採用離線(Air-gapped)設計。
離線 Root CA 建置要點
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| +------------------------------------------------------------------+
| 離線 Root CA 環境 |
+------------------------------------------------------------------+
| |
| +------------------+ +------------------+ |
| | 專用實體主機 | | HSM 設備 | |
| | 無網路連接 | | FIPS 140-2 | |
| | 全碟加密 | | Level 3 | |
| +------------------+ +------------------+ |
| |
| +------------------+ +------------------+ |
| | 獨立電源 | | 實體保險箱 | |
| | 不斷電系統 | | 雙人控制 | |
| +------------------+ +------------------+ |
| |
| 安全措施: |
| - 安裝於受控制的機房或保險庫 |
| - 啟用全碟加密(如 LUKS、BitLocker) |
| - 使用 HSM 保護私鑰 |
| - 實施雙人控制(Dual Control)政策 |
| - 所有操作需有詳細稽核紀錄 |
| |
+------------------------------------------------------------------+
|
Root CA 操作程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 1. 準備離線環境
# 確保主機完全斷開網路連接
# 2. 產生 Root CA 金鑰對(使用 HSM)
pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so \
--login --keypairgen --key-type rsa:4096 \
--label "RootCA-Key" --id 01
# 3. 產生 Root CA 自簽憑證
openssl req -new -x509 -days 7300 \
-engine pkcs11 -keyform engine \
-key "pkcs11:object=RootCA-Key;type=private" \
-sha512 -out rootCA.crt \
-subj "/C=TW/O=Example Corporation/CN=Example Root CA"
# 4. 匯出 Root CA 憑證至安全媒體
# 使用加密的 USB 隨身碟傳輸憑證
|
線上 Issuing CA 設計
Issuing CA 架構考量
線上 Issuing CA 是直接面對憑證申請的 CA,需要在安全性和可用性之間取得平衡:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| +------------------------------------------------------------------+
| 線上 Issuing CA 架構 |
+------------------------------------------------------------------+
| |
| +----------------+ +----------------+ |
| | Issuing CA 1 | | Issuing CA 2 | |
| | (Active) | | (Standby) | |
| +-------+--------+ +-------+--------+ |
| | | |
| +-----------+---------------+ |
| | |
| +------v------+ |
| | HSM Pool | |
| | (網路 HSM) | |
| +-------------+ |
| |
| +----------------+ +----------------+ |
| | OCSP 回應器 | | CRL 發布點 | |
| | (Responder) | | (Distribution) | |
| +----------------+ +----------------+ |
| |
+------------------------------------------------------------------+
|
Issuing CA 高可用性設計
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 設定憑證範本
# Microsoft AD CS 範例
# 1. 建立網頁伺服器憑證範本
certutil -installdefaulttemplates
# 2. 設定憑證自動註冊
# 透過群組原則設定自動註冊
# 3. 設定 CRL 發布排程
certutil -setreg ca\CRLPeriodUnits 7
certutil -setreg ca\CRLPeriod "Days"
certutil -setreg ca\CRLDeltaPeriodUnits 1
certutil -setreg ca\CRLDeltaPeriod "Days"
|
憑證政策與實務聲明
CP(Certificate Policy)與 CPS(Certification Practice Statement)
企業 PKI 需要制定完整的憑證政策文件:
| 文件 | 內容 | 目的 |
|---|
| CP | 憑證政策 | 定義憑證用途、信任層級、使用者義務 |
| CPS | 認證實務聲明 | 說明 CA 如何實施 CP 的技術細節 |
憑證政策 OID 規劃
1
2
3
4
5
6
7
8
9
10
11
| 企業 OID 架構範例:
1.3.6.1.4.1.{企業ID}
└── 1 (PKI)
├── 1 (Certificate Policies)
│ ├── 1 (高保證憑證)
│ ├── 2 (中保證憑證)
│ └── 3 (低保證憑證)
└── 2 (Certificate Extensions)
├── 1 (自訂擴充 1)
└── 2 (自訂擴充 2)
|
憑證用途定義
1
2
3
4
5
6
7
8
9
10
11
| +------------------------------------------------------------------+
| 憑證用途矩陣 |
+------------------------------------------------------------------+
| 憑證類型 | 數位簽章 | 金鑰加密 | 資料加密 | 不可否認 |
+------------------------------------------------------------------+
| 使用者簽章憑證 | V | | | V |
| 使用者加密憑證 | | V | V | |
| 伺服器 SSL 憑證 | V | V | | |
| 程式碼簽章憑證 | V | | | V |
| 設備認證憑證 | V | V | | |
+------------------------------------------------------------------+
|
金鑰保護(HSM)
HSM 選型考量
硬體安全模組(HSM)是保護 CA 私鑰的核心設備:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| +------------------------------------------------------------------+
| HSM 部署架構 |
+------------------------------------------------------------------+
| |
| +-----------------------+ +-----------------------+ |
| | Root CA HSM | | Issuing CA HSM | |
| | (離線、FIPS 140-2 L3) | | (線上、網路型) | |
| +-----------------------+ +-----------------------+ |
| |
| HSM 類型選擇: |
| +------------------+ +------------------+ +------------------+ |
| | PCI-e 介面卡 | | 網路 HSM | | USB Token | |
| | (單機部署) | | (叢集部署) | | (小型環境) | |
| +------------------+ +------------------+ +------------------+ |
| |
| 主要廠商: |
| - Thales (nShield, Luna) |
| - Entrust (nShield) |
| - Utimaco |
| - AWS CloudHSM (雲端) |
| - Azure Dedicated HSM (雲端) |
| |
+------------------------------------------------------------------+
|
HSM 金鑰管理最佳實務
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 使用 PKCS#11 介面操作 HSM
# 1. 初始化 HSM 分割區
pkcs11-tool --module /path/to/hsm/library.so \
--init-token --label "PKI-Partition" \
--so-pin <security-officer-pin>
# 2. 產生 CA 金鑰對
pkcs11-tool --module /path/to/hsm/library.so \
--login --keypairgen \
--key-type rsa:4096 \
--label "IssuingCA-2024" \
--id 01
# 3. 設定金鑰屬性
# 確保金鑰不可匯出
pkcs11-tool --module /path/to/hsm/library.so \
--login --set-attribute \
--type privkey --id 01 \
--extractable false --sensitive true
|
憑證生命週期管理
憑證生命週期各階段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| +------------------------------------------------------------------+
| 憑證生命週期管理 |
+------------------------------------------------------------------+
| |
| 1. 申請階段 2. 核發階段 3. 使用階段 |
| +----------+ +----------+ +----------+ |
| | 身份驗證 | ---> | 憑證簽發 | ---> | 部署使用 | |
| | CSR 產生 | | 品質檢查 | | 監控到期 | |
| +----------+ +----------+ +----------+ |
| |
| 4. 更新階段 5. 撤銷階段 6. 歸檔階段 |
| +----------+ +----------+ +----------+ |
| | 到期提醒 | ---> | 撤銷處理 | ---> | 金鑰歸檔 | |
| | 重新申請 | | CRL 發布 | | 安全銷毀 | |
| +----------+ +----------+ +----------+ |
| |
+------------------------------------------------------------------+
|
憑證自動化管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 使用 certbot 或 ACME 協定進行內部憑證自動更新
# 內部 ACME 伺服器範例:step-ca
# 1. 安裝 step-ca
wget https://dl.step.sm/gh-release/certificates/latest/step-ca_linux_amd64.tar.gz
tar -xzf step-ca_linux_amd64.tar.gz
# 2. 初始化 CA
step ca init --name="Internal CA" \
--provisioner="admin" \
--dns="ca.internal.example.com" \
--address=":8443"
# 3. 設定 ACME 供應者
step ca provisioner add acme --type ACME
# 4. 用戶端自動更新
step ca certificate "server.example.com" server.crt server.key \
--provisioner acme \
--san server.example.com
|
憑證到期監控
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #!/bin/bash
# 憑證到期監控腳本
CERT_DIR="/etc/pki/certs"
WARN_DAYS=30
for cert in $CERT_DIR/*.crt; do
expiry=$(openssl x509 -in "$cert" -enddate -noout | cut -d= -f2)
expiry_epoch=$(date -d "$expiry" +%s)
current_epoch=$(date +%s)
days_left=$(( (expiry_epoch - current_epoch) / 86400 ))
if [ $days_left -lt $WARN_DAYS ]; then
echo "警告: $cert 將在 $days_left 天後到期"
# 發送告警通知
fi
done
|
災難復原規劃
備份策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| +------------------------------------------------------------------+
| PKI 備份策略 |
+------------------------------------------------------------------+
| |
| 備份類型 頻率 保留期限 儲存位置 |
| +------------------------------------------------------------------+
| | Root CA 備份 | 每次變更後 | 永久 | 異地保險箱 |
| | Issuing CA 備份 | 每日 | 90 天 | 異地備份 |
| | 憑證資料庫 | 每日 | 1 年 | 本地+異地 |
| | 設定檔備份 | 每次變更後 | 版本控制 | Git 儲存庫 |
| | CRL/OCSP 資料 | 每次更新後 | 30 天 | 多點複製 |
| +------------------------------------------------------------------+
| |
+------------------------------------------------------------------+
|
金鑰託管與復原
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 金鑰分割 (Key Ceremony) 程序
# 1. 使用 Shamir's Secret Sharing 分割金鑰
# 例如:5 份中需要 3 份才能復原
# 使用 ssss (Shamir's Secret Sharing Scheme)
ssss-split -t 3 -n 5 -w token < master-key.txt
# 2. 將各份金鑰分發給不同的金鑰保管人
# 每位保管人負責保管一份,並儲存於不同地點
# 3. 復原程序
ssss-combine -t 3 > recovered-key.txt
# 輸入 3 份金鑰片段即可復原
|
災難復原程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| +------------------------------------------------------------------+
| 災難復原程序 |
+------------------------------------------------------------------+
| |
| 階段 1: 評估與通報 (0-2 小時) |
| - 確認災難範圍 |
| - 啟動事件回應團隊 |
| - 通知相關利害關係人 |
| |
| 階段 2: 緊急處置 (2-4 小時) |
| - 啟用備援 Issuing CA |
| - 確保 CRL/OCSP 服務持續運作 |
| - 暫停受影響服務 |
| |
| 階段 3: 系統復原 (4-24 小時) |
| - 從備份還原 CA 資料庫 |
| - 驗證憑證資料完整性 |
| - 重新建立與 HSM 的連接 |
| |
| 階段 4: 服務恢復 (24-48 小時) |
| - 完整測試 CA 功能 |
| - 恢復正常憑證簽發服務 |
| - 更新文件與報告 |
| |
+------------------------------------------------------------------+
|
稽核與合規
稽核日誌管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| +------------------------------------------------------------------+
| 稽核日誌要求 |
+------------------------------------------------------------------+
| |
| 必須記錄的事件: |
| +------------------------------------------------------------------+
| | 事件類型 | 記錄內容 |
| +------------------------------------------------------------------+
| | CA 啟動/停止 | 時間戳記、操作者、原因 |
| | 憑證簽發 | 序號、主體、有效期、申請者 |
| | 憑證撤銷 | 序號、撤銷原因、撤銷時間 |
| | CRL 產生 | 發布時間、憑證數量 |
| | 金鑰操作 | 產生、匯入、匯出、銷毀 |
| | 管理存取 | 登入、登出、權限變更 |
| | 設定變更 | 變更內容、變更前後值 |
| +------------------------------------------------------------------+
| |
+------------------------------------------------------------------+
|
合規標準對應
| 標準 | 適用範圍 | 主要要求 |
|---|
| WebTrust for CA | 公開信任 CA | 稽核標準、安全控制 |
| ETSI EN 319 411 | 歐盟 eIDAS | 電子簽章合規 |
| PCI DSS | 支付產業 | 金鑰管理、存取控制 |
| SOC 2 Type II | 服務組織 | 安全性、可用性控制 |
| ISO 27001 | 資訊安全 | ISMS 管理系統 |
定期稽核檢查清單
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| +------------------------------------------------------------------+
| PKI 稽核檢查清單 |
+------------------------------------------------------------------+
| |
| [ ] 金鑰管理 |
| [ ] HSM 健康狀態檢查 |
| [ ] 金鑰存取權限審核 |
| [ ] 金鑰輪換排程確認 |
| |
| [ ] 憑證管理 |
| [ ] 過期憑證清理 |
| [ ] 憑證使用率分析 |
| [ ] 異常憑證申請審查 |
| |
| [ ] 安全控制 |
| [ ] 存取日誌審核 |
| [ ] 權限最小化確認 |
| [ ] 弱點掃描結果審查 |
| |
| [ ] 營運持續 |
| [ ] 備份完整性驗證 |
| [ ] 災難復原演練 |
| [ ] 文件更新狀態 |
| |
+------------------------------------------------------------------+
|
總結
建置企業級 PKI 架構是一項需要周詳規劃的重要工程。成功的 PKI 部署需要考量以下關鍵要素:
- 架構設計:根據組織規模選擇適當的 CA 層級架構
- 安全措施:Root CA 離線保護、HSM 金鑰保護
- 政策制定:完整的 CP/CPS 文件和憑證用途定義
- 生命週期管理:自動化憑證管理和到期監控
- 災難復原:完善的備份策略和復原程序
- 合規稽核:符合產業標準的稽核機制
透過本文的架構設計指南,組織可以建立一套安全、可靠且符合合規要求的企業級 PKI 系統,為數位轉型提供堅實的安全基礎。
參考資料