Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Empfohlene Maßnahme
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.