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

プロパティ
ルール ID CA5364
Title 非推奨のセキュリティ プロトコルを使用しないでください
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

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

非推奨の値:

  • Ssl3
  • Tls
  • Tls10
  • Tls11

規則の説明

トランスポート層セキュリティ (TLS) では、コンピューター間の通信を保護し、ハイパーテキスト転送プロトコル セキュア (HTTPS) とよく併用されます。 TLS の古いプロトコル バージョンは TLS 1.2 や TLS 1.3 よりも安全性が低く、新しい脆弱性が見つかる可能性が高くなります。 リスクを最小限に抑えるために、古いプロトコル バージョンを使用しないようにしてください。 非推奨のプロトコル バージョンの識別および削除に関するガイダンスについては、「TLS 1.0 の問題の解決、第 2 版」を参照してください。

違反の修正方法

非推奨の TLS プロトコル バージョンを使用しないでください。

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

次の場合、この警告を抑制できます。

  • 非推奨のプロトコル バージョンへの参照が、非推奨のバージョンを有効にするために使用されていない。
  • セキュリティで保護された TLS 構成を使用するようにアップグレードできないレガシ サービスに接続する必要がある。

警告を抑制する

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

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

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

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

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

疑似コードの例

列挙型名の違反

using System;
using System.Net;

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

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

整数値の違反

using System;
using System.Net;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5364 violation
        ServicePointManager.SecurityProtocol = (SecurityProtocolType) 768;    // TLS 1.1
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5364 violation
        ServicePointManager.SecurityProtocol = CType(768, SecurityProtocolType)   ' TLS 1.1
    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://learn.microsoft.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://learn.microsoft.com/dotnet/framework/network-programming/tls
    End Sub
End Class

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

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

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