Compartilhar via


A propriedade ClientCertificate não aciona mais a renegociação no contexto do HttpSys

A propriedade HttpContext.Connection.ClientCertificate não aciona mais renegociações de TLS para HttpSys.

Versão introduzida

ASP.NET Core 6.0

Comportamento antigo

A configuração HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation permitiu que a renegociação fosse disparada tanto por HttpContext.Connection.ClientCertificate quanto por HttpContext.Connection.GetClientCertificateAsync.

Novo comportamento

A configuração HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation permite que a renegociação seja disparada apenas por HttpContext.Connection.GetClientCertificateAsync. HttpContext.Connection.ClientCertificate retorna o certificado atual se disponível, mas não renegocia com o cliente para solicitar o certificado.

Motivo da alteração

Ao implementar os mesmos recursos para Kestrel, ficou claro que os aplicativos precisam ser capazes de verificar o estado do certificado do cliente antes de iniciar uma renegociação. Para problemas como o corpo da solicitação em conflito com a renegociação, verificar o estado permite que o seguinte padrão de uso lide com o problema:

if (connection.ClientCertificate == null)
{
  await BufferRequestBodyAsync();
  await connection.GetClientCertificateAsync();
}

Os aplicativos que usam a negociação de certificado de cliente atrasada devem chamar GetClientCertificateAsync(CancellationToken) para disparar a renegociação.

APIs afetadas

Consulte também