Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Zalecana akcja
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.