Linux AIA-certificaat ophalen beperkt tot twee fetches per keten-build

Op Linux- en andere OpenSSL-platforms is het bouwen van certificaatketens via Authority Information Access (AIA) nu beperkt tot twee AIA-ophaalbewerkingen per ketenbuild. Deze limiet is afgestemd op Linux-gedrag met Windows, die altijd een limiet voor twee ophalen heeft gehad.

Geïntroduceerde versie

.NET 11 preview 7

Vorig gedrag

Voorheen heeft AIA op OpenSSL-platforms X509Chain.Build(X509Certificate2) opgehaald om tussenliggende certificaten te downloaden zo vaak als nodig is om de keten te voltooien. Een keten waarvoor drie tussenliggende certificaten zijn gedownload via AIA, kan bijvoorbeeld slagen:

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

Nieuw gedrag

Vanaf .NET 11 worden op OpenSSL-platforms X509Chain.Build(X509Certificate2) maximaal twee AIA-ophaalbewerkingen per ketenbuild uitgevoerd, die overeenkomt met Windows gedrag. Als voor de keten meer dan twee tussenliggende verbindingen moeten worden gedownload via AIA, slaagt de ketenbuild niet alleen via AIA-downloads:

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.

Type van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Windows heeft AIA altijd beperkt tot twee per ketenbuild, terwijl de Linux-implementatie geen dergelijke limiet had, waardoor een inconsistentie tussen platforms werd gecreëerd. Dezelfde limiet voor Linux maakt platformoverschrijdend gedrag consistent en beperkt de netwerk- en geheugenresources die nodig zijn om een certificaatketen te bouwen. Zie dotnet/runtime#130456 voor meer informatie.

Als uw toepassing certificaatketens bouwt op Linux waarvoor meer dan twee tussenliggende certificaten moeten worden opgehaald via AIA, moet u de tussenliggende certificaten rechtstreeks opgeven in plaats van te vertrouwen op AIA-downloads:

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

U kunt ook de tussenliggende certificaten installeren in het tussenliggende certificaatarchief van de gebruiker of het systeem, zodat ze beschikbaar zijn voor alle ketens zonder AIA-downloads.

Betreffende API's