我是否應該為內部伺服器憑證、外部用戶端憑證和 HTTPS 憑證使用單獨的根 CA?

我是否應該為內部伺服器憑證、外部用戶端憑證和 HTTPS 憑證使用單獨的根 CA?

對於以下情況,我應該有 3 個根 CA、1 個根 CA + 3 個中間體或其他 PKI 設定嗎?

我有三個用例:

  1. 透過 HTTPS 公開 Web API(伺服器憑證)
  2. 允許客戶端使用客戶端憑證而不是使用者名稱/密碼(外部客戶端憑證)進行身份驗證
  3. 驗證內部伺服器作為客戶端(內部客戶端憑證)

每個密鑰對都將僅用於一個用例。

假設我不需要第 3 方 CA,而是在封閉系統中使用自訂 PKI。我可以看到支持這一點的兩種主要方式:

  1. 1 個根 CA 和 3 個中間 CA(每種情況一個中間 CA)
  2. 3 個根 CA(每個用例一個根)

我嘗試從#1 開始,但我發現為了openssl s_client針對 node.js HTTPS 伺服器測試客戶端證書,我需要從中間到根進行驗證,而不僅僅是中間。這意味著用例 2 和 3 之間的客戶端憑證可以互換,因為根是信任錨。我環顧四周,但找不到使中間 CA 成為 node.js HTTPS 伺服器的信任錨的方法。

所以,我嚴重誤解了一些事情,我需要轉向實施#2,或混合一些事情。

答案1

X.509 憑證可以提供機密性和身分驗證。也就是說,它們可以用於連結加密,並且可以選擇用於驗證使用者或伺服器。

他們不提供授權。相反,這取決於應用程式來判斷是否允許使用 X.509 憑證進行驗證的實體存取資源。

這意味著,上面的 (1) 就可以了。使用一個根並確保透過另一種方式進行授權。

但是,如果您確實堅持 X.509 證書也應該提供授權,則您需要:

  • 依靠證書策略來確保應用程式僅信任某些證書 - 祝您好運,因為您可能需要編寫自己的應用程式來檢查策略;
  • 為每個應用程式使用不同的根憑證;如上述(2)。

相關內容