Udostępnij za pośrednictwem


Dynamiczny czas weryfikacji X509ChainPolicy

W poprzednich wersjach platformy .NET X509ChainPolicy.VerificationTime wartość została przypisana podczas DateTime.NowX509ChainPolicy konstruowania obiektu. Użycie tego samego X509ChainPolicy obiektu dla wielu wywołań spowodowało, że X509Chain.Build(X509Certificate2) wszystkie kompilacje łańcucha używały tej samej wartości co czas weryfikacji, bez względu na to, ile czasu minęło od momentu utworzenia obiektu.

Nowe domyślne zachowanie polega na użyciu wartości DateTime.Now , gdy X509Chain.Build() jest wywoływana jako czas weryfikacji. Ta zmiana nie ma wpływu na kompilacje łańcucha, które jawnie przypisują wartość X509ChainPolicy.VerificationTime.

Poprzednie zachowanie

Wartość została przypisana X509ChainPolicy.VerificationTime do DateTime.Now obiektu podczas X509ChainPolicy konstruowania obiektu. Ta wartość została użyta we wszystkich kolejnych X509Chain.Build(X509Certificate2) wywołaniach (chyba że wartość została ponownie przypisana później lub dopóki wartość nie zostanie ponownie przypisana).

Nowe zachowanie

Wartość X509ChainPolicy.VerificationTime jest przypisywana, gdy DateTime.NowX509ChainPolicy obiekt jest konstruowany, ale nowa X509ChainPolicy.VerificationTimeIgnored właściwość domyślnie ma wartość true. Gdy ta właściwość ma wartość true, metoda używa DateTime.Now metody jako czasu weryfikacji zamiast X509ChainPolicy.VerificationTimeX509Chain.Build(X509Certificate2) podczas tworzenia łańcucha.

Przypisywanie wartości do X509ChainPolicy.VerificationTime właściwości automatycznie ustawia VerificationTimeIgnored wartość na false.

Wprowadzona wersja

.NET 7

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność binarną.

Przyczyna wprowadzenia zmiany

Osoby wywołujące, które buforują skonfigurowane X509ChainPolicy obiekty, często były zaskoczeni, że ich walidacja powoli przechodziła dalej w czasie. Ta zmiana ułatwia X509ChainPolicy długotrwałą pracę z obiektami i nie ma znaczącego wpływu na krótkotrwałe obiekty.

Zmiany nie mają wpływu na następujące osoby wywołujące:

  • Obiekty wywołujące, które nie mają długotrwałych X509ChainPolicy obiektów.
  • Wywołujące, które jawnie przypisują X509ChainPolicy.VerificationTime właściwość.

Obiekt wywołujący, który ma długotrwały X509ChainPolicy obiekt, który chce używać poprzedniego zachowania, może przypisać nową X509ChainPolicy.VerificationTimeIgnored właściwość do false lub przypisać X509ChainPolicy.VerificationTime właściwość do DateTime.Nowklasy .

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

lub

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

Dotyczy interfejsów API