动态 X509ChainPolicy 验证时间

在早期版本的 .NET 中,构造 X509ChainPolicy 对象时,将 X509ChainPolicy.VerificationTime 值分配给了 DateTime.Now。 对 X509Chain.Build(X509Certificate2) 的多次调用使用相同的 X509ChainPolicy 对象会导致所有链生成都使用与验证时间相同的值,无论自对象创建以来已经过去了多少时间。

新的默认行为是在调用 X509Chain.Build() 时使用 DateTime.Now 的值作为验证时间。 此更改不会影响显式分配 X509ChainPolicy.VerificationTime 的链生成。

旧行为

构造 X509ChainPolicy 对象时,将 X509ChainPolicy.VerificationTime 值分配给 DateTime.Now。 此值用于所有后续 X509Chain.Build(X509Certificate2) 调用(除非或直到之后重新分配该值)。

新行为

构造 X509ChainPolicy 对象时将 X509ChainPolicy.VerificationTime 值分配给 DateTime.Now,但新的 X509ChainPolicy.VerificationTimeIgnored 属性默认为 true。 当此属性的值为 true 时,X509Chain.Build(X509Certificate2) 方法在生成链时使用 DateTime.Now 而不是 X509ChainPolicy.VerificationTime 作为验证时间。

将值分配给 X509ChainPolicy.VerificationTime 属性会自动将 VerificationTimeIgnored 设置为 false

引入的版本

.NET 7

中断性变更的类型

此项更改可能会影响二进制兼容性

更改原因

缓存已配置的 X509ChainPolicy 对象的调用方通常会惊讶于他们的验证正在慢慢地回移。 此更改使得生存期较长的 X509ChainPolicy 对象更易于使用,并且不会显着影响短生存期对象。

以下调用方不受更改的影响:

  • 没有长生存期 X509ChainPolicy 对象的调用方。
  • 显式分配 X509ChainPolicy.VerificationTime 属性的调用方。

具有长生存期 X509ChainPolicy 对象并希望使用先前行为将新的 X509ChainPolicy.VerificationTimeIgnored 属性分配给 false 或将 X509ChainPolicy.VerificationTime 属性分配给 DateTime.Now 的调用方。

var policy = new X509ChainPolicy
{
   // ...
   VerificationTime = DateTime.Now,
};

var policy = new X509ChainPolicy
{
    // ...
    VerificationTimeIgnored = false,
};

受影响的 API