Udostępnij za pośrednictwem


CA5364: Nie używaj przestarzałych protokołów zabezpieczeń

Właściwości Wartość
Identyfikator reguły CA5364
Tytuł Nie używaj przestarzałych protokołów zabezpieczeń
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Ta reguła jest uruchamiana po spełnieniu jednego z następujących warunków:

Przestarzałe wartości to:

  • Ssl3
  • Tls
  • Tls10
  • Tls11

Opis reguły

Protokół TRANSPORT Layer Security (TLS) zabezpiecza komunikację między komputerami, najczęściej z protokołem Secure (HTTPS) funkcji Hypertext Transfer Protocol. Starsze wersje protokołu TLS są mniej bezpieczne niż TLS 1.2 i TLS 1.3 i są bardziej narażone na nowe luki w zabezpieczeniach. Unikaj starszych wersji protokołu, aby zminimalizować ryzyko. Aby uzyskać wskazówki dotyczące identyfikowania i usuwania przestarzałych wersji protokołu, zobacz Rozwiązywanie problemu z protokołem TLS 1.0, 2. wydanie.

Jak naprawić naruszenia

Nie używaj przestarzałych wersji protokołu TLS.

Kiedy pomijać ostrzeżenia

To ostrzeżenie można pominąć, jeśli:

  • Odwołanie do przestarzałej wersji protokołu nie jest używane do włączania przestarzałej wersji.
  • Musisz nawiązać połączenie ze starszą usługą, której nie można uaktualnić, aby korzystać z bezpiecznych konfiguracji protokołu TLS.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie nazwy wyliczenia

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

Naruszenie wartości całkowitej

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

Rozwiązanie

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: Unikaj trwałego kodowania wartości SecurityProtocolType

CA5397: Nie używaj przestarzałych wartości SslProtocols

CA5398: Unikaj zakodowanych na stałe wartości SslProtocols