La proprietà ClientCertificate non attiva più la rinegoziazione per HttpSys

La proprietà HttpContext.Connection.ClientCertificate non attiva più le rinegoziazioni TLS per HttpSys.

Versione introdotta

ASP.NET Core 6.0

Comportamento precedente

L’impostazione HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation consentiva di attivare la rinegoziazione sia da HttpContext.Connection.ClientCertificate che da HttpContext.Connection.GetClientCertificateAsync.

Nuovo comportamento

L'impostazione HttpSysOptions.ClientCertificateMethod = ClientCertificateMethod.AllowRenegotiation consente di attivare la rinegoziazione solo da HttpContext.Connection.GetClientCertificateAsync. HttpContext.Connection.ClientCertificate restituisce il certificato corrente, se disponibile, ma non rinegozia con il client per richiedere il certificato.

Motivo della modifica

Quando si sono implementate le stesse funzionalità per Kestrel, è emerso chiaramente che le applicazioni devono essere in grado di controllare lo stato del certificato client prima di attivare una rinegoziazione. Per problemi come il corpo della richiesta in conflitto con la rinegoziazione, il controllo dello stato consente al modello di utilizzo seguente di gestire il problema:

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

Le app che usano la negoziazione ritardata del certificato client devono chiamare GetClientCertificateAsync(CancellationToken) per attivare la rinegoziazione.

API interessate

Vedi anche