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

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

Причина

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

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

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

  • 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