Migrar código SslStream do .NET Framework para o .NET

O .NET Core trouxe muitas melhorias, bem como mudanças significativas em como SslStream funciona. A mudança mais importante relacionada à segurança de rede é que a classe ServicePointManager foi em grande parte obsoletada e afeta apenas a interface herdada WebRequest.

Para cada SslStream instância, você deve configurar os protocolos TLS permitidos e os retornos de chamada de validação de certificado separadamente via SslServerAuthenticationOptions ou SslClientAuthenticationOptions. Para configurar as opções de segurança de rede usadas em HTTPS no HttpClient, você precisa configurar as opções de segurança no manipulador subjacente. O manipulador padrão usado por HttpClient é SocketsHttpHandler, que tem uma SslOptions propriedade que aceita SslClientAuthenticationOptions.

Considere o exemplo a seguir que demonstra como criar um HttpClient com um retorno de chamada de validação de certificado personalizado.

bool CustomCertificateValidator(
    object sender,
    X509Certificate? certificate,
    X509Chain? chain,
    SslPolicyErrors sslPolicyErrors)
{
    // TODO: Always returns false. 
    // Need to implement certificate evaluation logic.
    return false;
}

HttpClient httpClient = new(
    new SocketsHttpHandler
    {
        SslOptions =
        {
            RemoteCertificateValidationCallback = CustomCertificateValidator
        }
    });

A tabela a seguir mostra como migrar propriedades individuais ServicePointManager relacionadas ao TLS.

API de origem API de destino
CheckCertificateRevocationList Defina o apropriado X509RevocationMode em SslClientAuthenticationOptions.CertificateRevocationCheckMode.
EncryptionPolicy Utilize SslClientAuthenticationOptions.EncryptionPolicy.
SecurityProtocol Utilize SslClientAuthenticationOptions.EnabledSslProtocols.
ServerCertificateValidationCallback Utilize SslClientAuthenticationOptions.RemoteCertificateValidationCallback.