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

プロパティ
ルール ID CA5398
Title ハードコーディングされた SslProtocols 値を回避します
[カテゴリ] 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 でのトランスポート層セキュリティ (TLS) のベスト プラクティス」を参照してください。

違反の修正方法

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

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

将来の TLS プロトコル バージョンを使用するようにアップグレードできないレガシ サービスに接続する必要がある場合、警告を非表示にすることを推奨します。

警告を抑制する

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

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

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

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

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

疑似コードの例

列挙型名の違反

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5398 violation
        SslProtocols sslProtocols = SslProtocols.Tls12;
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Function ExampleMethod() As SslProtocols
        ' CA5398 violation
        Return SslProtocols.Tls12
    End Function
End Class

整数値の違反

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public SslProtocols ExampleMethod()
    {
        // CA5398 violation
        return (SslProtocols) 3072;    // TLS 1.2
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Function ExampleMethod() As SslProtocols
        ' CA5398 violation
        Return CType(3072, SslProtocols)   ' TLS 1.2
    End Function
End Class

解決策

using System;
using System.Security.Authentication;

public class TestClass
{
    public void Method()
    {
        // Let the operating system decide what TLS protocol version to use.
        // See https://video2.skills-academy.com/dotnet/framework/network-programming/tls
        SslProtocols sslProtocols = SslProtocols.None;
    }
}
Imports System
Imports System.Security.Authentication

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
        Dim sslProtocols As SslProtocols = SslProtocols.None
    End Sub
End Class

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

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

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