X.509 憑證透過簽發者簽章,將主體公開金鑰繫結至所宣告的主體身分。 憑證驗證用於判定在特定通訊協定和連線中是否可以接受此繫結。 僅解析憑證或僅驗證其簽章並不足夠。
編碼與憑證結構 #
憑證是 ASN.1 值,通常使用 DER 編碼。PEM 是 DER 物件的 Base64 文字形式:
-----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 上閱讀或評論(發表評論需要登入)