当X.509证书链由X1、X2……Xn组成,Xn为根CA时,较低级别的证书是否可以比其父级证书的有效期更长?我认为至少在实践中,较低的水平应该是高水平的适当子范围。
虽然我在 RFC2459 中找不到任何此类义务,但我可以依赖这个假设吗?
任何意见都深表感谢。
当X.509证书链由X1、X2……Xn组成,Xn为根CA时,较低级别的证书是否可以比其父级证书的有效期更长?我认为至少在实践中,较低的水平应该是高水平的适当子范围。
虽然我在 RFC2459 中找不到任何此类义务,但我可以依赖这个假设吗?
任何意见都深表感谢。
这是一个历史上有争议的观点。
在来自 RFC 5280 的验证算法(顺便说一下,它取代了 RFC 2459)中,没有有效性范围嵌套的要求。但是,一些历史实现一直坚持它;例如,参见Peter Gutmann的X.509 风格指南:
虽然这在任何标准中都没有规定,但有些软件需要有效期嵌套,其中主体有效期位于发行者有效期内。然而,大多数软件执行简单的逐点检查,检查证书链在某个时间点(通常是当前时间)是否有效。维护有效性嵌套要求在设计层次结构中连续几代证书之间的重叠有效期时要格外小心。当现有 CA 被重新植根或重新创建父级(例如,部门 CA 从属于公司 CA)时,会出现进一步的复杂情况。
Microsoft PKI(“ADCS”,又名Active Directory 证书服务)强制执行有效期嵌套,因为在颁发证书时,它不允许该证书的有效期结束日期超过当前 CA 证书的有效期(实际上,如果会导致这种情况,则截断模板规定的有效期)。
即使在更新 CA 证书时,可以保持相同的 CA 名称和 CA 密钥,在这种情况下,只要两者都未过期,旧 CA 证书和新 CA 证书都可以互换使用,在之前和之前颁发的 EE 证书上续订后。即如果旧的CA证书是CA1,新的CA2是CA2,证书EE1是在续订之前签发的,证书EE2是在续订之后签发的,那么CA1->EE1、CA1->EE2、CA2->EE1和CA2-> EE2 都应该验证;这对于确保平稳过渡非常方便。虽然有效期嵌套意味着 CA1->EE1 和 CA2->EE2 将嵌套,但 CA1->EE2 和 CA2->EE1 可能不会嵌套——这很好。
总结:不能依赖有效期嵌套,验证证书时不应该尝试强制嵌套。
嗯,我同意我希望在RFC 5280 4.1.2.5 中找到此信息。有效期。(顺便说一句,RFC 5280 淘汰了 RFC 3280,RFC 3280 淘汰了 RFC 2459,所以你真的不应该再看 2459 了)。
也就是说,您可以从逻辑上弄清楚这一点(至少对于标准的类似 TLS 的设置):当最终用户验证证书时,他们必须沿着链一直到根,确保沿途的每个证书都是有效的。假设 X2 在 X1 之前到期(并假设 X2 是 X1 的颁发者)。一旦 X2 过期,X1 就等于没用了,因为没有办法建立从 X1 到 Xn 的验证链。
以下是 CA 颁发的证书的生命周期可能比根证书更长的情况:要求规定 A)所有叶证书的生命周期必须为 3 年(比如它们要进入嵌入式设备) B)所有叶证书必须是发出同一个根(假设你只有空间固定一个根)。现在,CA 证书将在 2 年后到期,在此期间您计划为相同的 CA 密钥颁发新的 CA 证书。在这种情况下,从 2 年的根证书上颁发 3 年的叶子证书是没有问题的。
您要问的问题有点模糊,您是在寻找 CA / 颁发者来执行“有效性嵌套”规则,还是让客户端 / 验证者来执行它。
如果您是 CA / Issuer: : 由您决定。有许多 CA 不会颁发比自己寿命更长的证书。也就是说,我可以想象可能想要这样做的场景。
如果您是客户/验证者:我认为严格这一点对您没有任何好处。您故意在您的客户端和不遵循“有效性嵌套”的 CA 之间造成兼容性问题......为了什么收益?_(假设链中的所有证书在验证时都必须在其有效期内,我想这就是您在评论中所说的“标准验证”)。