Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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();
}
Ação recomendada
Os aplicativos que usam a negociação de certificado de cliente atrasada devem chamar GetClientCertificateAsync(CancellationToken) para disparar a renegociação.
APIs afetadas
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)