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)