Linux AIA 証明書のフェッチは、チェーン ビルドごとに 2 つのフェッチに制限されます

Linux やその他の OpenSSL ベースのプラットフォームでは、証明機関情報アクセス (AIA) を介した証明書チェーンの構築が、チェーン ビルドごとに 2 つの AIA フェッチに制限されるようになりました。 この制限により、Linux の動作は常に 2 フェッチ制限を持つWindowsに合わせて調整されます。

導入されたバージョン

.NET 11 Preview 7

以前の動作

以前は、OpenSSL ベースのプラットフォームでは、 X509Chain.Build(X509Certificate2) AIA フェッチを実行して、チェーンを完了するために必要な回数の中間証明書をダウンロードしました。 たとえば、AIA 経由で 3 つの中間証明書をダウンロードする必要があるチェーンは成功する可能性があります。

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

新しい動作

.NET 11 以降、OpenSSL ベースのプラットフォームでは、X509Chain.Build(X509Certificate2)はチェーン ビルドごとに最大 2 つの AIA フェッチを実行します。これは、Windowsの動作に一致します。 チェーンが AIA 経由で 2 つ以上の中間をダウンロードする必要がある場合、チェーンのビルドは 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.

破壊的変更の種類

この変更は 動作の変更です。

変更理由

Windowsでは、AIA フェッチは常にチェーン ビルドごとに 2 回に制限されていますが、Linux の実装にはそのような制限がなく、プラットフォーム間で不整合が発生しました。 Linux の場合と同じ制限により、クロスプラットフォームの動作が一貫し、証明書チェーンを構築するために必要なネットワークリソースとメモリ リソースがより適切に制限されます。 詳細については、「 dotnet/runtime#130456」を参照してください。

アプリケーションが Linux 上に証明書チェーンを構築し、AIA 経由で 2 つ以上の中間証明書をフェッチする必要がある場合は、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);

または、中間証明書をユーザーまたはシステムの中間証明書ストアにインストールして、AIA のダウンロードなしですべてのチェーンで使用できるようにします。

影響を受ける API