Migrowanie kodu SslStream z programu .NET Framework do platformy .NET

Platforma .NET Core wprowadziła wiele ulepszeń, a także istotne zmiany wpływające na sposób działania SslStream. Najważniejszą zmianą związaną z zabezpieczeniami sieci jest to, że ServicePointManager klasa została w większości przestarzała i ma wpływ tylko na starszy WebRequest interfejs.

Dla każdego SslStream wystąpienia należy skonfigurować dozwolone protokoły TLS i wywołania zwrotne weryfikacji certyfikatu oddzielnie za pośrednictwem metody SslServerAuthenticationOptions lub SslClientAuthenticationOptions. Aby skonfigurować opcje zabezpieczeń sieci używane w protokole HTTPS w programie HttpClient, należy skonfigurować opcje zabezpieczeń w podstawowej procedurze obsługi. Domyślna procedura obsługi używana przez HttpClient to SocketsHttpHandler, która ma właściwość SslOptions akceptującą SslClientAuthenticationOptions.

Rozważmy następujący przykład, który pokazuje, jak utworzyć obiekt HttpClient z niestandardowym wywołaniem zwrotnym weryfikacji certyfikatu:

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
        }
    });

W poniższej tabeli przedstawiono sposób migrowania poszczególnych ServicePointManager właściwości związanych z protokołem TLS.

Źródłowy interfejs API Docelowy interfejs API
CheckCertificateRevocationList Ustaw odpowiednie X509RevocationMode na SslClientAuthenticationOptions.CertificateRevocationCheckMode.
EncryptionPolicy Użyj SslClientAuthenticationOptions.EncryptionPolicy.
SecurityProtocol Użyj SslClientAuthenticationOptions.EnabledSslProtocols.
ServerCertificateValidationCallback Użyj SslClientAuthenticationOptions.RemoteCertificateValidationCallback.