Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Linux y otras plataformas basadas en OpenSSL, la creación de cadenas de certificados a través de Authority Information Access (AIA) ahora se limita a dos capturas de AIA por compilación de cadena. Este límite alinea el comportamiento de Linux con Windows, que siempre ha tenido un límite de captura de dos.
Versión introducida
.NET 11 Preview 7
Comportamiento anterior
Anteriormente, en plataformas basadas en OpenSSL, X509Chain.Build(X509Certificate2) realizó capturas de AIA para descargar certificados intermedios tantas veces como sea necesario para completar la cadena. Por ejemplo, una cadena que requería tres certificados intermedios descargados a través de AIA podría realizarse correctamente:
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
Nuevo comportamiento
A partir de .NET 11, en plataformas basadas en OpenSSL, X509Chain.Build(X509Certificate2) realiza como máximo dos capturas de AIA por compilación de cadena, lo que coincide con el comportamiento de Windows. Si la cadena requiere que se descarguen más de dos intermedios a través de AIA, la compilación de la cadena no se realiza correctamente a través de descargas de AIA por sí solas:
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.
Tipo de cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
Windows siempre ha limitado las capturas de AIA a dos por compilación de cadena, mientras que la implementación de Linux no tenía este límite, lo que creó una incoherencia entre plataformas. El mismo límite en Linux hace que el comportamiento multiplataforma sea coherente y mejor limite los recursos de red y memoria necesarios para construir una cadena de certificados. Para obtener más información, consulte dotnet/runtime#130456.
Acción recomendada
Si la aplicación compila cadenas de certificados en Linux que requieren que se capturen más de dos certificados intermedios a través de AIA, proporcione los certificados intermedios directamente en lugar de confiar en las descargas de 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);
Como alternativa, instale los certificados intermedios en el almacén de certificados intermedios del usuario o del sistema para que estén disponibles para todas las cadenas sin descargas de AIA.