Recupero di certificati AIA Linux limitato a due recupero per ogni compilazione a catena

In Linux e in altre piattaforme basate su OpenSSL, la compilazione della catena di certificati tramite l'accesso alle informazioni dell'autorità (AIA) è ora limitata a due operazioni di recupero aia per ogni compilazione della catena. Questo limite allinea il comportamento di Linux con Windows, che ha sempre avuto un limite di recupero a due.

Versione introdotta

.NET 11 Preview 7

Comportamento precedente

In precedenza, nelle piattaforme basate su OpenSSL, X509Chain.Build(X509Certificate2) eseguiva il recupero AIA per scaricare i certificati intermedi il maggior numero di volte necessario per completare la catena. Ad esempio, una catena che richiede tre certificati intermedi scaricati tramite AIA potrebbe avere esito positivo:

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

Nuovo comportamento

A partire da .NET 11, nelle piattaforme basate su OpenSSL, X509Chain.Build(X509Certificate2) esegue al massimo due operazioni di recupero AIA per ogni compilazione della catena, che corrisponde al comportamento Windows. Se la catena richiede il download di più di due intermedi tramite AIA, la compilazione della catena non riesce solo tramite download AIA:

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 di cambiamento che interrompe la compatibilità

Questa modifica è una modifica funzionale.

Motivo della modifica

Windows ha sempre limitato i recupero di AIA a due per ogni compilazione a catena, mentre l'implementazione di Linux non aveva tale limite, che ha creato una incoerenza tra le piattaforme. Lo stesso limite in Linux rende coerente il comportamento multipiattaforma e limita meglio le risorse di rete e memoria necessarie per costruire una catena di certificati. Per altre informazioni, vedere dotnet/runtime#130456.

Se l'applicazione compila catene di certificati in Linux che richiedono il recupero di più di due certificati intermedi tramite AIA, fornire direttamente i certificati intermedi anziché basarsi sui download 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);

In alternativa, installare i certificati intermedi nell'archivio certificati intermedi dell'utente o del sistema in modo che siano disponibili per tutte le catene senza download AIA.

Le API interessate