CA5397: не используйте устаревшие значения SslProtocols
Свойство | Значение |
---|---|
Идентификатор правила | CA5397 |
Заголовок | Не используйте нерекомендуемые значения SslProtocols |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Это правило возникает при выполнении любого из следующих условий:
- Использовалась ссылка на устаревшее значение System.Security.Authentication.SslProtocols.
- Целочисленное значение, представляющее нерекомендуемое значение, было назначено SslProtocols переменной, используемой SslProtocols в качестве возвращаемого значения или используемого в качестве аргумента SslProtocols .
Нерекомендуемые значения:
- Ssl2
- Ssl3
- Tls
- Tls10
- Tls11
Описание правила
Протокол 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