CA5398: избегайте жестко закодированных значений SslProtocols
Свойство | Значение |
---|---|
Идентификатор правила | CA5398 |
Заголовок | Избегайте жестко зафиксированных значений SslProtocols |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | 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