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

另請參閱