HttpContext.Connection.ClientCertificate
プロパティは、HttpSys の TLS 再ネゴシエーションをトリガーしなくなりました。
導入されたバージョン
ASP.NET Core 6.0
以前の動作
HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation
設定すると、HttpContext.Connection.ClientCertificate
とHttpContext.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
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)
こちらも参照ください
.NET