Pobieranie certyfikatu AIA systemu Linux ograniczone do dwóch pobrań na kompilację łańcucha

W systemie Linux i innych platformach opartych na protokole OpenSSL tworzenie łańcucha certyfikatów za pośrednictwem usługi Authority Information Access (AIA) jest teraz ograniczone do dwóch pobrań AIA na kompilację łańcucha. Ten limit jest zgodny z zachowaniem systemu Linux z Windows, który zawsze miał limit pobierania dwóch elementów.

Wersja wprowadzona

.NET 11 (wersja zapoznawcza 7)

Poprzednie zachowanie

Wcześniej na platformach X509Chain.Build(X509Certificate2) opartych na protokole OpenSSL pobrano narzędzie AIA w celu pobrania certyfikatów pośrednich tyle razy, ile jest potrzebne do ukończenia łańcucha. Na przykład łańcuch, który wymagał trzech certyfikatów pośrednich pobranych za pośrednictwem AIA, może zakończyć się powodzeniem:

using var cert = X509Certificate2.CreateFromPem(leafCertificateWithThreeAiaHops);
using var chain = new X509Chain();

// On Linux with .NET 10 and earlier, this could succeed even when three or more
// intermediate certificates needed to be downloaded via AIA.
bool result = chain.Build(cert);
Console.WriteLine(result); // Could print True with 3+ AIA fetches

Nowe zachowanie

Począwszy od .NET 11, na platformach X509Chain.Build(X509Certificate2) opartych na protokole OpenSSL, wykonuje co najwyżej dwa pobieranie AIA na kompilację łańcucha, która jest zgodna z zachowaniem Windows. Jeśli łańcuch wymaga pobrania przez usługę AIA więcej niż dwóch pośrednich, kompilacja łańcucha nie powiedzie się tylko za pośrednictwem pobierania AIA:

using var cert = X509Certificate2.CreateFromPem(leafCertificateWithThreeAiaHops);
using var chain = new X509Chain();

// On Linux with .NET 11+, if three or more AIA fetches are required,
// the build fails.
bool result = chain.Build(cert);
Console.WriteLine(result); // Prints False if more than two AIA fetches are needed.

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Windows zawsze ograniczał pobieranie AIA do dwóch na kompilację łańcucha, podczas gdy implementacja systemu Linux nie miała takiego limitu, co spowodowało niespójność na różnych platformach. Ten sam limit w systemie Linux sprawia, że zachowanie międzyplatformowe jest spójne i lepsze ogranicza zasoby sieci i pamięci wymagane do utworzenia łańcucha certyfikatów. Aby uzyskać więcej informacji, zobacz dotnet/runtime#130456.

Jeśli aplikacja tworzy łańcuchy certyfikatów w systemie Linux, które wymagają pobrania więcej niż dwóch certyfikatów pośrednich za pośrednictwem AIA, podaj certyfikaty pośrednie bezpośrednio zamiast polegać na pobraniu AIA:

using var cert = X509Certificate2.CreateFromPem(leafCertPem);
using var intermediate1 = X509Certificate2.CreateFromPem(intermediate1Pem);
using var intermediate2 = X509Certificate2.CreateFromPem(intermediate2Pem);
using var intermediate3 = X509Certificate2.CreateFromPem(intermediate3Pem);

using var chain = new X509Chain();
chain.ChainPolicy.ExtraStore.Add(intermediate1);
chain.ChainPolicy.ExtraStore.Add(intermediate2);
chain.ChainPolicy.ExtraStore.Add(intermediate3);
// other ChainPolicy settings as appropriate

bool result = chain.Build(cert);

Alternatywnie zainstaluj certyfikaty pośrednie w magazynie certyfikatów pośrednich użytkownika lub systemu, aby były dostępne dla wszystkich łańcuchów bez pobierania AIA.

Interfejsy API, których dotyczy problem