Keys

x509 CA 信任問題

  • April 28, 2014

我試圖了解 CA、信任和客戶端證書的邏輯。我有一個大致的了解,但很難彌合一些差距。

在假設的情況下,軟體系統可能由n機器組成。我想為這個系統生成一個自定義 CA 並讓它自簽名。CA 將由證書和私鑰組成。私鑰將(我假設)在一台機器上保持私密,僅用於製作其他證書,而不用於任何機器間通信。據我了解,以這種方式創建證書的每台機器都必須擁有 CA 的公鑰,以驗證自身以及它嘗試與之通信的其他機器。

為了生成 CA 密鑰,我照常製作私鑰並對其進行自簽名。這將生成一個私鑰和一個證書。為了製作客戶端證書,我製作了一個私鑰,然後使用 CA 的證書發出了簽名請求。

以下是我對此的疑問:

  1. CA的證書實際上是公鑰嗎?如果沒有,它是否包含公鑰?
  2. 是否每台需要通信的機器都需要擁有 CA 證書的本地副本才能驗證其他證書?
  3. 我的假設是錯誤的還是不完整的?

感謝您的幫助和理解!

具體而言,讓我們以 RSA 為例。您生成您的密鑰 - 將包含一個公鑰 - 兩個數字(N,e)和一個私鑰(N,d),因此如果您用於c = m^e mod N加密 RSA 消息,您可以使用m = c^d mod N它來解密它。(實際上它不是那麼簡單,您必須擔心混合加密、填充、恆定時間模冪運算)。

證書將包含公鑰以及描述組織的數據,所有這些通常都經過加密簽名——通常由另一個受信任的實體簽名,但由他們自己的公鑰簽名的自簽名證書除外。要簽署某人的證書(我將稱之為cert),您需要私鑰S = Hash(cert)^d mod N。但是,要驗證簽名是否正確,您只需要一個公鑰,通過檢查它S^e mod N是否與原始cert.

所以回答你的問題:

  1. 證書不是公鑰,但包含 (1) 公鑰以及 (2) 其他辨識資訊(組織是誰,證書應該用於什麼資源),以及 (3) 來自其他受信任組織的簽名.
  2. 如果您想驗證 say 的證書https://crypto.stackexchange.com,您的瀏覽器(或作業系統)最終需要遵循一條信任鏈,以獲取它知道並信任的證書。也就是說,stackexchange 提供的證書有效,*.stackexchange.com經驗證屬於Stack Exchange, Inc.在紐約州紐約市以外的地區運營。它由DigiCert High Assurance CA-3(可能驗證了 Stack Exchange 的身份)簽名。DigiCert High Assurance CA-3 中間證書頒發機構本身由DigiCert High Assurance EV Root CA. 的公共證書DigiCert High Assurance EV Root CA是自簽名的,您的作業系統或網路瀏覽器需要它才能信任它(例如,對於可能儲存的作業系統:/etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.pem或對於網路瀏覽器/usr/share/ca-certificates/mozilla/DigiCert_High_Assurance_EV_Root_CA.crt)。
  3. 我想你有它的要點。您使用您廣泛共享的 CA 證書(充當公鑰 + 更多數據)創建一個 CA,而私鑰保密僅用於簽署其他證書。當您的一台機器(稱為 M)需要證書 - 私鑰對(例如,執行 SSL)時,M 創建自己的私鑰和證書籤名請求(CSR) - 基本上是未簽名的證書(技術上它是自簽名的 - 以確保它在 CA 簽名之前沒有被篡改)。CSR 使用 CA 的私鑰安全地發送到電腦,CA 對 CSR 進行簽名以創建簽名證書,然後將其發送回 M。現在 M 可以創建使用證書和自己的私鑰來設置 SSL 連接。

引用自:https://crypto.stackexchange.com/questions/15874