Share via


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

プロパティ
ルール ID CA5397
Title 非推奨の SslProtocols 値を使用しません
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

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

非推奨の値:

  • Ssl2
  • Ssl3
  • Tls
  • Tls10
  • Tls11

規則の説明

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

違反の修正方法

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

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

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

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

警告を抑制する

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

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

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

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

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

疑似コードの例

列挙型名の違反

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5397 violation for using Tls11
        SslProtocols protocols = SslProtocols.Tls11 | SslProtocols.Tls12;
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5397 violation for using Tls11
        Dim sslProtocols As SslProtocols = SslProtocols.Tls11 Or SslProtocols.Tls12
    End Sub
End Class

整数値の違反

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5397 violation
        SslProtocols sslProtocols = (SslProtocols) 768;    // TLS 1.1
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5397 violation
        Dim sslProtocols As SslProtocols = CType(768, SslProtocols)   ' TLS 1.1
    End Sub
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://learn.microsoft.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://learn.microsoft.com/dotnet/framework/network-programming/tls
        Dim sslProtocols As SslProtocols = SslProtocols.None
    End Sub
End Class

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

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

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