Linux AIA-certifikat som hämtar begränsat till två hämtningar per kedjeversion

På Linux och andra OpenSSL-baserade plattformar är certifikatkedjans skapande via AIA (Authority Information Access) nu begränsad till två AIA-hämtningar per kedjeversion. Den här gränsen justerar Linux-beteendet med Windows, som alltid har haft en gräns på två hämtningar.

Version lanserad

.NET 11 Förhandsversion 7

Tidigare beteende

Tidigare, på OpenSSL-baserade plattformar, X509Chain.Build(X509Certificate2) utförde AIA-hämtningar för att ladda ned mellanliggande certifikat så många gånger som behövs för att slutföra kedjan. Till exempel kan en kedja som krävde tre mellanliggande certifikat som laddats ned via AIA lyckas:

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

Nytt beteende

Från och med .NET 11, på OpenSSL-baserade plattformar, X509Chain.Build(X509Certificate2) utförs högst två AIA-hämtningar per kedjeversion, vilket matchar Windows beteende. Om kedjan kräver att mer än två mellanliggande objekt laddas ned via AIA lyckas inte kedjebygget enbart med AIA-nedladdningar:

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 av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Windows har alltid begränsat AIA-hämtningar till två per kedjeversion, medan Linux-implementeringen inte hade någon sådan gräns, vilket skapade en inkonsekvens mellan plattformar. Samma gräns för Linux gör plattformsoberoende beteende konsekvent och begränsar bättre de nätverks- och minnesresurser som krävs för att skapa en certifikatkedja. Mer information finns i dotnet/runtime#130456.

Om ditt program skapar certifikatkedjor i Linux som kräver att fler än två mellanliggande certifikat hämtas via AIA anger du mellanliggande certifikat direkt i stället för att förlita sig på AIA-nedladdningar:

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);

Du kan också installera mellanliggande certifikat i det mellanliggande certifikatarkivet för användare eller system så att de är tillgängliga för alla kedjor utan AIA-nedladdningar.

Berörda API:er