Compartilhar via


CA5386: Evitar codificar o valor SecurityProtocolType

Property Valor
ID da regra CA5386
Título Evitar codificar o valor SecurityProtocolType
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Essa regra será acionada quando uma das seguintes condições for atendida:

Os valores seguros são:

  • Tls12
  • Tls13

Descrição da regra

O TLS (Transport Layer Security) protege a comunicação entre computadores, mais comumente com o protocolo HTTPS. As versões do protocolo TLS 1.0 e TLS 1.1 são preteridas, enquanto o TLS 1.2 e o TLS 1.3 representam as atuais. No futuro, o TLS 1.2 e o TLS 1.3 poderão ser preteridos. Para garantir que seu aplicativo permaneça seguro, evite codificar uma versão de protocolo e tenha como alvo pelo menos o .NET Framework v4.7.1. Para mais informações, confira Práticas recomendadas do protocolo TLS (Armazenamento local de thread) com o .NET Framework.

Como corrigir violações

Não embutir versões de protocolo TLS em código.

Quando suprimir avisos

Você pode suprimir esse aviso se o aplicativo for direcionado .NET Framework v4.6.2 ou anterior e poderá ser executado em um computador que tenha padrões inseguros.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação de nome da enumeração

using System;
using System.Net;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5386 violation
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5386 violation
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    End Sub
End Class

Violação do valor inteiro

using System;
using System.Net;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5386 violation
        ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;    // TLS 1.2
    }
}
Imports System
Imports System.Net

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5386 violation
        ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)   ' TLS 1.2
    End Sub
End Class

Solução

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

CA5364: Não use protocolos de segurança preteridos

CA5397: Não usar valores de SslProtocols preteridos

CA5398: Evitar valores de SslProtocols fixos