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


CA5364: не используйте устаревшие протоколы безопасности

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

Причина

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

  • Использовалась ссылка на устаревшее значение System.Net.SecurityProtocolType.
  • Переменной SecurityProtocolType было назначено целочисленное значение, представляющее устаревшее значение.

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

  • Ssl3
  • Tls
  • Tls10
  • TLS 1.1

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

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