次の方法で共有


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

こちらも参照ください