Linux AIA-Zertifikat, das auf zwei Abrufe pro Kettenbuild beschränkt ist

Auf Linux- und anderen OpenSSL-basierten Plattformen ist das Erstellen der Zertifikatkette über Authority Information Access (AIA) jetzt auf zwei AIA-Abrufe pro Kettenbuild beschränkt. Dieser Grenzwert richtet das Linux-Verhalten an Windows aus, das immer ein Zwei-Abruf-Limit hatte.

Eingeführt in Version

.NET 11 Vorschau 7

Bisheriges Verhalten

Zuvor haben auf OpenSSL-basierten Plattformen AIA-Abrufe durchgeführt, X509Chain.Build(X509Certificate2) um Zwischenzertifikate so oft wie nötig herunterzuladen, um die Kette abzuschließen. Beispielsweise könnte eine Kette, die drei über AIA heruntergeladene Zwischenzertifikate benötigt hat, erfolgreich sein:

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

Neues Verhalten

Ab .NET 11 führt auf OpenSSL-basierten Plattformen X509Chain.Build(X509Certificate2) höchstens zwei AIA-Abrufe pro Kettenbuild durch, die Windows Verhalten entsprechen. Wenn die Kette mehr als zwei Zwischenstufen erfordert, die über AIA heruntergeladen werden müssen, kann der Kettenbuild nicht allein über AIA-Downloads ausgeführt werden:

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.

Art der einschneidenden Änderung

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Windows hat immer die AIA-Abrufe auf zwei Pro-Chain-Builds beschränkt, während die Linux-Implementierung keine solche Beschränkung hatte, was eine Inkonsistenz auf allen Plattformen erzeugte. Derselbe Grenzwert für Linux macht das plattformübergreifende Verhalten konsistent und verbessert die Netzwerk- und Speicherressourcen, die zum Erstellen einer Zertifikatkette erforderlich sind. Weitere Informationen finden Sie unter dotnet/runtime#130456.

Wenn Ihre Anwendung Zertifikatketten unter Linux erstellt, die mehr als zwei Zwischenzertifikate benötigen, die über AIA abgerufen werden müssen, stellen Sie die Zwischenzertifikate direkt bereit, anstatt auf AIA-Downloads zu vertrauen:

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

Installieren Sie alternativ die Zwischenzertifikate im Benutzer- oder System-Zwischenzertifikatspeicher, damit sie für alle Ketten ohne AIA-Downloads verfügbar sind.

Betroffene APIs