ClientCertificate プロパティで HttpSys の再ネゴシエーションがトリガーされなくなりました
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