Бөлісу құралы:


CA5397: не используйте устаревшие значения SslProtocols

Свойство Значение
Идентификатор правила CA5397
Заголовок Не используйте нерекомендуемые значения SslProtocols
Категория Безопасность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Нет
Применимые языки C# и Visual Basic

Причина

Это правило срабатывает при выполнении любого из следующих условий:

  • Использовалась ссылка на устаревшее значение System.Security.Authentication.SslProtocols.
  • Целочисленное значение, представляющее устаревшее значение, было назначено переменной SslProtocols, использовано в качестве возвращаемого значения SslProtocols или аргумента SslProtocols.

Нерекомендуемые значения:

  • Ssl2
  • Ssl3
  • Tls
  • Tls10
  • TLS 1.1

Описание правила

Протокол безопасности транспортного уровня (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