Share via


ClientCertificate プロパティで HttpSys の再ネゴシエーションがトリガーされなくなりました

HttpContext.Connection.ClientCertificate プロパティで HttpSys の TLS 再ネゴシエーションがトリガーされなくなりました。

導入されたバージョン

ASP.NET Core 6.0

以前の動作

HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation を設定した場合、HttpContext.Connection.ClientCertificateHttpContext.Connection.GetClientCertificateAsync の両方で再ネゴシエーションをトリガーすることができました。

新しい動作

HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation を設定した場合、HttpContext.Connection.GetClientCertificateAsync によってのみ再ネゴシエーションをトリガーすることができます。 HttpContext.Connection.ClientCertificate では、現在の証明書が使用可能な場合、それを返します。しかし、クライアントと再ネゴシエーションを行って、証明書を要求することはありません。

変更理由

Kestrel に対して同じ機能を実装する場合、アプリケーションでは再ネゴシエーションをトリガーする前にクライアント証明書の状態を確認できる必要があることが明らかになりました。 要求本文と再ネゴシエーションとが競合するような問題については、状態を確認すれば、次の使用パターンで問題に対処できます。

if (connection.ClientCertificate == null)
{
  await BufferRequestBodyAsync();
  await connection.GetClientCertificateAsync();
}

遅延クライアント証明書ネゴシエーションを使用するアプリでは、GetClientCertificateAsync(CancellationToken) を呼び出して再ネゴシエーションをトリガーする必要があります。

影響を受ける API

関連項目