Udostępnij za pomocą


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 10 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