CA5386: SecurityProtocolType 値のハードコードを避けます

プロパティ
ルール ID CA5386
Title SecurityProtocolType 値のハードコードを避けます
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

この規則は、次のいずれかの条件に該当する場合に適用されます。

安全な値は次のとおりです:

  • Tls12
  • Tls13

規則の説明

トランスポート層セキュリティ (TLS) では、コンピューター間の通信を保護し、ハイパーテキスト転送プロトコル セキュア (HTTPS) とよく併用されます。 プロトコル バージョン TLS 1.0 と TLS 1.1 は非推奨で、TLS 1.2 と TLS 1.3 が現行のバージョンです。 今後、TLS 1.2 と TLS 1.3 も非推奨になる可能性があります。 アプリケーションをセキュリティで保護し続けるために、プロトコル バージョンをハードコーティングしないようにし、少なくとも .NET Framework v4.7.1 を対象にしてください。 詳細については、「.NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス」を参照してください。

違反の修正方法

TLS プロトコル バージョンをハードコーディングしないでください。

どのようなときに警告を抑制するか

アプリケーションが .NET Framework v4.6.2 以前を対象とし、安全でない既定値を使用するコンピューターで実行される可能性がある場合は、この警告を抑制できます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA5386.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

列挙型名の違反

using System;
using System.Net;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5386 violation
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5386 violation
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    End Sub
End Class

整数値の違反

using System;
using System.Net;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5386 violation
        ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;    // TLS 1.2
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5386 violation
        ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)   ' TLS 1.2
    End Sub
End Class

解決策

using System;
using System.Net;

public class TestClass
{
    public void TestMethod()
    {
        // Let the operating system decide what TLS protocol version to use.
        // See https://video2.skills-academy.com/dotnet/framework/network-programming/tls
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' Let the operating system decide what TLS protocol version to use.
        ' See https://video2.skills-academy.com/dotnet/framework/network-programming/tls
    End Sub
End Class

CA5364: 非推奨のセキュリティ プロトコルを使用しないでください

CA5397:非推奨の SslProtocols 値を使用しません

CA5398:ハードコーディングされた SslProtocols 値を回避します