SslStream コードを .NET Framework から .NET に移行する

.NET Core では、多くの機能強化が加わり、 SslStream のしくみが大きく変わります。 ネットワーク セキュリティに関連する最も重要な変更は、 ServicePointManager クラスはほとんど廃止され、レガシ WebRequest インターフェイスにのみ影響を与えるということです。

SslStreamインスタンスごとに、許可される TLS プロトコルと証明書検証コールバックを、SslServerAuthenticationOptionsまたはSslClientAuthenticationOptions経由で個別に構成する必要があります。 HttpClientで HTTPS で使用されるネットワーク セキュリティ オプションを構成するには、基になるハンドラーでセキュリティ オプションを構成する必要があります。 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 を使用してください。