.NET Framework에서 .NET으로 SslStream 코드 마이그레이션

.NET Core는 SslStream 작동 방식에 많은 개선 사항과 호환성을 깨는 변경 사항을 가져왔습니다. 네트워크 보안과 관련된 가장 중요한 변경 사항은 클래스 ServicePointManager가 더 이상 사용되지 않으며, 레거시 WebRequest 인터페이스에만 영향을 준다는 것입니다.

SslStream 인스턴스마다 허용된 TLS 프로토콜과 인증서 유효성 검사 콜백을 SslServerAuthenticationOptions 또는 SslClientAuthenticationOptions를 통해 각각 개별적으로 구성해야 합니다. HTTPS에서 HttpClient사용되는 네트워크 보안 옵션을 구성하려면 기본 처리기에서 보안 옵션을 구성해야 합니다. HttpClient에서 사용되는 기본 처리기는 SocketsHttpHandler이며, 이 처리기에는 SslOptions을(를) 허용하는 SslClientAuthenticationOptions 속성이 있습니다.

사용자 지정 인증서 유효성 검사 콜백을 HttpClient 사용하여 만드는 방법을 보여 주는 다음 예제를 고려합니다.

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

다음 표에서는 TLS와 관련된 개별 ServicePointManager 속성을 마이그레이션하는 방법을 보여줍니다.

원본 API 대상 API
CheckCertificateRevocationList X509RevocationMode에 적절한 SslClientAuthenticationOptions.CertificateRevocationCheckMode 설정을 적용합니다.
EncryptionPolicy SslClientAuthenticationOptions.EncryptionPolicy을 사용합니다.
SecurityProtocol SslClientAuthenticationOptions.EnabledSslProtocols을 사용합니다.
ServerCertificateValidationCallback SslClientAuthenticationOptions.RemoteCertificateValidationCallback을 사용합니다.