Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
No Linux e noutras plataformas baseadas em OpenSSL, a construção da cadeia de certificados através do Acesso à Informação de Autoridade (AIA) está agora limitada a duas buscas AIA por build da cadeia. Este limite alinha o comportamento do Linux com o do Windows, que sempre teve um limite de duas buscas.
Versão introduzida
.NET 11 Pré-visualização 7
Comportamento anterior
Anteriormente, em plataformas baseadas em OpenSSL, X509Chain.Build(X509Certificate2) as buscas AIA realizadas para descarregar certificados intermédios tantas vezes quanto necessário para completar a cadeia. Por exemplo, uma cadeia que exigisse três certificados intermédios descarregados através do AIA poderia ter sucesso:
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
Novo comportamento
A partir do .NET 11, em plataformas baseadas em OpenSSL, X509Chain.Build(X509Certificate2) executa no máximo dois fetches AIA por build de cadeia, o que corresponde ao comportamento do Windows. Se a cadeia exigir que mais de dois intermédios sejam descarregados através do AIA, a construção da cadeia não tem sucesso apenas com downloads do 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 de mudança disruptiva
Esta mudança é uma mudança comportamental.
Motivo da mudança
O Windows sempre limitou os fetches AIA a duas compilações por cadeia, enquanto a implementação Linux não tinha tal limite, o que criou uma inconsistência entre plataformas. O mesmo limite no Linux torna o comportamento multiplataforma consistente e limita melhor os recursos de rede e memória necessários para construir uma cadeia de certificados. Para mais informações, consulte dotnet/runtime#130456.
Ação recomendada
Se a sua aplicação constrói cadeias de certificados no Linux que exigem que mais de dois certificados intermédios sejam obtidos via AIA, forneça diretamente os certificados intermédios em vez de depender dos downloads do 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);
Alternativamente, instale os certificados intermédios na loja de certificados intermédios do utilizador ou do sistema para que estejam disponíveis para todas as cadeias sem downloads AIA.