Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No Linux e em outras plataformas baseadas em OpenSSL, a criação da cadeia de certificados por meio do Acesso de Informações da Autoridade (AIA) agora está limitada a duas buscas AIA por build de cadeia. Esse limite alinha o comportamento do Linux com Windows, que sempre teve um limite de duas buscas.
Versão introduzida
.NET 11 Versão Prévia 7
Comportamento anterior
Anteriormente, em plataformas baseadas em OpenSSL, X509Chain.Build(X509Certificate2) o AIA realizava buscas para baixar certificados intermediários quantas vezes for necessário para concluir a cadeia. Por exemplo, uma cadeia que exigia três certificados intermediários baixados por meio do AIA poderia ter êxito:
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 duas buscas AIA por build de cadeia, que correspondem Windows comportamento. Se a cadeia exigir que mais de dois intermediários sejam baixados por meio do AIA, o build da cadeia não terá êxito apenas por meio de 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 é uma alteração comportamental.
Motivo da alteração
Windows sempre limitou as buscas do AIA a dois por build de cadeia, enquanto a implementação do Linux não tinha esse limite, o que criou uma inconsistência entre plataformas. O mesmo limite no Linux torna o comportamento entre plataformas consistente e limita melhor os recursos de rede e memória necessários para construir uma cadeia de certificados. Para obter mais informações, consulte dotnet/runtime#130456.
Ação recomendada
Se o aplicativo criar cadeias de certificados no Linux que exigem que mais de dois certificados intermediários sejam buscados por meio do AIA, forneça os certificados intermediários diretamente em vez de depender de 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);
Como alternativa, instale os certificados intermediários no repositório de certificados intermediário do usuário ou do sistema para que eles estejam disponíveis para todas as cadeias sem downloads do AIA.