我有以下自簽名證書鏈:RootCA -> IntermediateCA(由根簽名)-> 服務器證書(TLS 的葉子,由中間簽名)RootCA 的 MaxPathLen = 0我的證書是使用 certstrap 生成的CreateCertificateAuthority,CreateIntermediateCertificateAuthority所以我假設默認設置是正確的。但是,當嘗試讓我的自簽名證書與 Python 或 Node 客戶端一起使用時,我遇到了path length constraint exceeded錯誤。注意:使用 Go TLS 客戶端時,只需提供中間 CA 證書,設置就可以正常工作。Python 和 Node 似乎需要完整的證書鏈,因此問題出現了。從rfc5280我看到聲明:在這種情況下,它給出了可以在有效證書路徑中跟隨此證書的非自發行中間證書的最大數量。我很困惑non-self-issued intermediate certificates。這是否暗示我的鏈是有效的,因為 RootCA 簽署了中間(因此它不是非自發行的)?;蛘咚菬o效的,因為中間體算作non-self-issued證書。self這里具體指的是什么?它可能是自簽名或 rootca 是自我。在這種情況下,我的 rootCA 實際上是否應該具有 1 的 MaxPathLen?
2 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
自頒發是指鏈中的證書頒發給自己-即Subject 和Issuer 相同。這通常用于密鑰轉換目的,否則可以忽略。
出現問題是因為您已將 0 的 basicConstraint pathLenConstraint 放在根上。值為 0 時,它應該位于鏈中的最后一個 CA - 您稱為中間 CA 的那個。
來自 RFC 5280:
pathLenConstraint 為零表示沒有 [非自行頒發的] 中間 CA 證書可以跟隨在有效的證書路徑中
明智的做法是不要在您的 Root 上設置 pathLenConstraint,因為您在簽署從屬 CA 時可能不知道隨著時間的推移將如何填充。

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
如果根有MaxPathLen=0
,那么它只能頒發最終實體證書,并且不能跟隨中間 CA 證書。根 CA 是自簽名的。
在您的情況下,根已頒發中間 CA,這是不允許的。并會得到你描述的錯誤。
非自發的中間證書
這指的是可以遵循由該根頒發的根的中間 CA。
或者它是無效的,因為中間體算作非自行頒發的證書。
這是正確的中間超過 MaxPathlen = 0。
自己
指根。
根 CA 和 maxPathLen
maxPathLen >= 1 的根 CA 將適用于所呈現的場景。它可以有一個中間 CA,并且該中間可以簽署最終實體證書。
Root -> ICA -> EE
但是,如果 maxPathLen=1,以下內容將不起作用:
Root -> ICA-1 -> ICA-2 -> EE
- 2 回答
- 0 關注
- 187 瀏覽
添加回答
舉報
0/150
提交
取消