CA5398: избегайте жестко закодированных значений SslProtocols

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

Причина

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

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

Безопасными являются следующие значения:

  • Tls12
  • Tls13

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

Протокол TLS обеспечивает безопасность взаимодействия между компьютерами, чаще всего с помощью протокола HTTPS. Протоколы версии TLS 1.0 и TLS 1.1 являются устаревшими, а TLS 1.2 и TLS 1.3 являются актуальными. В будущем протоколы TLS 1.2 и TLS 1.3 могут быть отмечены как нерекомендуемые. Чтобы обеспечить безопасность приложения, не следует жестко задавать версию протокола. Дополнительные сведения см. в разделе Рекомендации по использованию протокола TLS с .NET Framework.

Устранение нарушений

Не следует жестко задавать версии протокола TLS.

Когда лучше отключить предупреждения

Если вам нужно подключиться к устаревшей службе, которая не может быть обновлена для использования будущих версий протокола TLS, безопасно отключить предупреждение.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

Примеры псевдокода

Нарушение имени перечисления

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5398 violation
        SslProtocols sslProtocols = SslProtocols.Tls12;
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Function ExampleMethod() As SslProtocols
        ' CA5398 violation
        Return SslProtocols.Tls12
    End Function
End Class

Нарушение целочисленного значения

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public SslProtocols ExampleMethod()
    {
        // CA5398 violation
        return (SslProtocols) 3072;    // TLS 1.2
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Function ExampleMethod() As SslProtocols
        ' CA5398 violation
        Return CType(3072, SslProtocols)   ' TLS 1.2
    End Function
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

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