Extraction de certificats AIA Linux limitée à deux extractions par build de chaîne

Sur Linux et d’autres plateformes OpenSSL, la génération de chaîne de certificats via l’accès aux informations d’autorité (AIA) est désormais limitée à deux extractions AIA par build de chaîne. Cette limite aligne le comportement Linux avec Windows, qui a toujours eu une limite à deux extractions.

Version introduite

.NET 11 Preview 7

Comportement antérieur

Auparavant, sur les plateformes OpenSSL, X509Chain.Build(X509Certificate2) a effectué des extractions AIA pour télécharger des certificats intermédiaires autant de fois que nécessaire pour terminer la chaîne. Par exemple, une chaîne qui exigeait trois certificats intermédiaires téléchargés via AIA pourrait réussir :

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

Nouveau comportement

À compter de .NET 11, sur les plateformes OpenSSL, X509Chain.Build(X509Certificate2) effectue au maximum deux extractions AIA par build de chaîne, qui correspondent à Windows comportement. Si la chaîne nécessite plus de deux intermédiaires à télécharger via AIA, la build de chaîne ne réussit pas par le biais des téléchargements AIA seuls :

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 de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Windows a toujours limité les extractions AIA à deux par build de chaîne, tandis que l’implémentation Linux n’avait pas de telle limite, ce qui a créé une incohérence entre les plateformes. La même limite sur Linux rend le comportement multiplateforme cohérent et mieux limite les ressources réseau et mémoire nécessaires pour construire une chaîne de certificats. Pour plus d’informations, consultez dotnet/runtime#130456.

Si votre application crée des chaînes de certificats sur Linux qui nécessitent plus de deux certificats intermédiaires à extraire via AIA, fournissez les certificats intermédiaires directement au lieu de compter sur les téléchargements 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);

Vous pouvez également installer les certificats intermédiaires dans le magasin de certificats intermédiaires utilisateur ou système afin qu’ils soient disponibles pour toutes les chaînes sans téléchargements AIA.

API affectées