X.509 憑證

最後更新: 2025-04-27 23:24:38 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

X.509 憑證透過簽發者簽章,將主體公開金鑰繫結至所宣告的主體身分。 憑證驗證用於判定在特定通訊協定和連線中是否可以接受此繫結。 僅解析憑證或僅驗證其簽章並不足夠。

編碼與憑證結構 #

憑證是 ASN.1 值,通常使用 DER 編碼。PEM 是 DER 物件的 Base64 文字形式:

text
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

經簽署的 tbsCertificate 包含版本、由簽發者唯一指派的序號、簽發者 辨別名稱、有效期間、主體辨別名稱、SubjectPublicKeyInfo (SPKI) 以及擴充功能。 外層憑證還包含簽發者的簽章演算法識別碼,以及對 tbsCertificate 的簽章。 簽發者公開金鑰不會以獨立憑證欄位的形式嵌入;必須透過建立通往簽發者憑證或 信任錨點的路徑來找到它。

TLS 使用的擴充功能 #

RFC 5280 擴充功能會限制憑證的使用方式:

  • basicConstraints 識別 CA 憑證和路徑長度限制。
  • keyUsage 限制 keyCertSign 或 digitalSignature 等操作。
  • extendedKeyUsage 可以將用途限制為伺服器驗證或用戶端驗證。
  • subjectAltName 搭載用於 TLS 身分檢查的 DNS 名稱和 IP 位址。
  • 主體金鑰識別碼和授權機構金鑰識別碼有助於路徑建立,但不能取代簽章驗證。

TLS 用戶端會將要求的 DNS 名稱與 subjectAltName 進行比對。對於正確簽發的 現代憑證,一般名稱不是通用的後備機制。有效時間、關鍵擴充功能、簽章演算法 原則、基本限制和金鑰用途都會參與驗證。

路徑、撤銷與釘選 #

路徑建立會從葉憑證到本機設定的信任錨點選取一連串簽發者。路徑驗證接著會 驗證簽章、時間、basicConstraints、路徑長度和名稱限制、金鑰用途、關鍵擴充 功能,以及依賴方的演算法和原則要求。如果應用程式使用憑證原則,原則樹可以 限制可接受的憑證原則。伺服器會傳送此程序所需的中繼憑證,但信任錨點通常由 用戶端信任存放區提供。

CRL 和 OCSP 提供撤銷資訊,但用戶端行為會因平台和通訊協定而異。未對實際 用戶端群體進行測試,不得聲稱能夠立即強制執行撤銷。憑證釘選會增加公開金鑰 或憑證限制;它具有營運復原成本,因此只有在定義明確的輪替程序時才應使用。

使用 openssl x509 -in cert.pem -noout -text 檢查欄位。顯示的 SHA-256 指紋是憑證位元組的摘要,用於頻外比對;它不是身分證明,也不能取代路徑驗證。

關於用於驗證憑證的 TLS 1.3 交握,請參閱 TLS 1.3。

評論

在 GitHub 上閱讀或評論(發表評論需要登入)