Hora de comprobación dinámica de X509ChainPolicy

En versiones anteriores de .NET, el valor X509ChainPolicy.VerificationTime se asignó a DateTime.Now cuando se construyó el objeto X509ChainPolicy. El uso del mismo objeto X509ChainPolicy para varias llamadas a X509Chain.Build(X509Certificate2) dio lugar a que todas las compilaciones de cadena usen ese mismo valor que el tiempo de comprobación, independientemente del tiempo transcurrido desde que se creó el objeto.

El comportamiento predeterminado nuevo es usar el valor de DateTime.Now cuando X509Chain.Build() se invoca como hora de comprobación. Este cambio no afecta a las compilaciones de cadena que asignan X509ChainPolicy.VerificationTime de forma explícita.

Comportamiento anterior

El valor X509ChainPolicy.VerificationTime se asignó a DateTime.Now cuando se construyó el objeto X509ChainPolicy. Este valor se usó en todas las llamadas a X509Chain.Build(X509Certificate2) posteriores (a menos que el valor se reasignase en un momento posterior o hasta que esto sucediese).

Comportamiento nuevo

El valor X509ChainPolicy.VerificationTime se asigna a DateTime.Now cuando se construye el objeto X509ChainPolicy, pero la propiedad X509ChainPolicy.VerificationTimeIgnored nueva tiene como valor predeterminado true. Cuando esta propiedad tiene un valor de true, el método X509Chain.Build(X509Certificate2) usa DateTime.Now como tiempo de comprobación, en lugar de X509ChainPolicy.VerificationTime, al crear la cadena.

La asignación de un valor a la propiedad X509ChainPolicy.VerificationTime establece automáticamente VerificationTimeIgnored en false.

Versión introducida

.NET 7

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

A menudo, los autores de llamadas que almacenan en caché los objetos X509ChainPolicy configurados se sorprendían de que su validación se moviera lentamente atrás en el tiempo. Este cambio facilita el trabajo de objetos X509ChainPolicy de larga duración y no afecta significativamente a los objetos de corta duración.

El cambio no afecta a los siguientes autores de llamadas:

  • Autores de llamadas que no tienen objetos X509ChainPolicy de larga duración.
  • Autores de llamadas que asignan explícitamente la propiedad X509ChainPolicy.VerificationTime.

Los autores de llamadas que tienen un objeto X509ChainPolicy de larga duración y que desean usar el comportamiento anterior pueden asignar la nueva propiedad X509ChainPolicy.VerificationTimeIgnored a false o la propiedad X509ChainPolicy.VerificationTime a DateTime.Now.

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

or

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

API afectadas