Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5397 |
| Заголовок | Не используйте нерекомендуемые значения SslProtocols |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Это правило срабатывает при выполнении любого из следующих условий:
- Использовалась ссылка на устаревшее значение System.Security.Authentication.SslProtocols.
- Целочисленное значение, представляющее устаревшее значение, было назначено переменной SslProtocols, использовано в качестве возвращаемого значения SslProtocols или аргумента SslProtocols.
Нерекомендуемые значения:
- Ssl2
- Ssl3
- Tls
- Tls10
- TLS 1.1
Описание правила
Протокол безопасности транспортного уровня (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