Temps de vérification X509ChainPolicy dynamique

Dans les versions précédentes de .NET, la valeur X509ChainPolicy.VerificationTime était affectée à DateTime.Now quand l’objet X509ChainPolicy a été construit. L’utilisation du même objet X509ChainPolicy pour plusieurs appels à X509Chain.Build(X509Certificate2) entraînait l’utilisation par toutes les builds de chaîne de la même valeur d’heure de vérification, indépendamment de la durée écoulée depuis la création de l’objet.

Le nouveau comportement par défaut consiste à utiliser la valeur de DateTime.Now quand X509Chain.Build() est appelé en tant qu’heure de vérification. Cette modification n’affecte pas les builds de chaîne qui attribuent X509ChainPolicy.VerificationTimeexplicitement.

Comportement précédent

La valeur X509ChainPolicy.VerificationTime a été attribuée à DateTime.Now quand l’objet X509ChainPolicy a été construit. Cette valeur a été utilisée dans tous les appels X509Chain.Build(X509Certificate2) suivants (sauf si la valeur est réattribuée ultérieurement).

Nouveau comportement

La valeur X509ChainPolicy.VerificationTime est attribuée à DateTime.Now quand l’objet X509ChainPolicy est construit, mais la nouvelle propriété X509ChainPolicy.VerificationTimeIgnored est définie par défaut sur true. Quand cette propriété a la valeur true, la méthode X509Chain.Build(X509Certificate2) utilise DateTime.Now en tant qu’heure de vérification au lieu de X509ChainPolicy.VerificationTime lors de la création de la chaîne.

L’affectation d’une valeur à la propriété X509ChainPolicy.VerificationTime définit VerificationTimeIgnored automatiquement sur false.

Version introduite

.NET 7

Type de changement cassant

Ce changement peut affecter la compatibilité binaire.

Raison du changement

Les appelants qui mettent en cache des objets X509ChainPolicy configurés ont souvent été surpris que leur validation remonte lentement dans le temps. Cette modification facilite l’utilisation des objets X509ChainPolicy de longue durée et n’a pas d’impact significatif sur les objets de courte durée.

Les appelants suivants ne sont pas affectés par la modification :

  • Appelants qui n’ont pas d’objets X509ChainPolicy de longue durée.
  • Appelants qui attribuent explicitement la propriété X509ChainPolicy.VerificationTime.

Les appelants ayant un objet X509ChainPolicy de longue durée de vie et souhaitant utiliser le comportement précédent peuvent définir la nouvelle propriété X509ChainPolicy.VerificationTimeIgnored sur false ou définir la propriété X509ChainPolicy.VerificationTime sur DateTime.Now.

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

ou

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

API affectées