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();
}
Azione consigliata
Le app che usano la negoziazione ritardata del certificato client devono chiamare GetClientCertificateAsync(CancellationToken) per attivare la rinegoziazione.
API interessate
- Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.ClientCertificateMethod
- Microsoft.AspNetCore.Http.ConnectionInfo.ClientCertificate
- Microsoft.AspNetCore.Http.ConnectionInfo.GetClientCertificateAsync(CancellationToken)