動態 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
- System.Security.Cryptography.X509Certificates.X509ChainPolicy
- System.Security.Cryptography.X509Certificates.X509ChainPolicy.VerificationTime
System.Security.Cryptography.X509Certificates.X509ChainPolicy.VerificationTimeIgnored