動態 X509ChainPolicy 驗證時間

在舊版 .NET 中,在建構 X509ChainPolicy 物件時,會對 DateTime.Now 指派 X509ChainPolicy.VerificationTime 值。 多次呼叫 X509Chain.Build(X509Certificate2) 但使用相同的 X509ChainPolicy 物件,則無論物件建立後經過多長的時間,所有的鏈結組建,都會使用相同的值作為驗證時間。

新的預設行為是叫用 X509Chain.Build() 作為驗證時間時,會使用 DateTime.Now 的值。 這項變更不會影響明確指派 X509ChainPolicy.VerificationTime 的鏈結組建。

先前的行為

建構 X509ChainPolicy 物件時,會對 DateTime.Now 指派 X509ChainPolicy.VerificationTime 值。 然後所有後續 X509Chain.Build(X509Certificate2) 呼叫中,都會使用此值 (除非或直到稍後重新指派值為止)。

新的行為

建構 X509ChainPolicy 物件時,會對 DateTime.Now 指派 X509ChainPolicy.VerificationTime 值,但新的 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