CA5398: Evitar valores de SslProtocols fixos
Property | Valor |
---|---|
ID da regra | CA5398 |
Título | Evitar valores de SslProtocols fixos |
Categoria | Segurança |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Essa regra será acionada quando uma das seguintes condições for atendida:
- Um valor System.Security.Authentication.SslProtocols seguro, mas embutido em código, foi referenciado.
- Um valor inteiro representando uma versão segura do protocolo foi atribuído a uma variável SslProtocols, usado como um valor de retorno SslProtocols ou usado como um argumento SslProtocols.
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 o aplicativo permaneça seguro, evite codificar uma versão de protocolo. 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
É seguro suprimir um aviso se você precisar se conectar a um serviço herdado que não pode ser atualizado para usar versões futuras do protocolo TLS.
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 CA5398
// The code that's violating the rule is on this line.
#pragma warning restore CA5398
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.CA5398.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.Security.Authentication;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5398 violation
SslProtocols sslProtocols = SslProtocols.Tls12;
}
}
Imports System
Imports System.Security.Authentication
Public Class TestClass
Public Function ExampleMethod() As SslProtocols
' CA5398 violation
Return SslProtocols.Tls12
End Function
End Class
Violação do valor inteiro
using System;
using System.Security.Authentication;
public class ExampleClass
{
public SslProtocols ExampleMethod()
{
// CA5398 violation
return (SslProtocols) 3072; // TLS 1.2
}
}
Imports System
Imports System.Security.Authentication
Public Class TestClass
Public Function ExampleMethod() As SslProtocols
' CA5398 violation
Return CType(3072, SslProtocols) ' TLS 1.2
End Function
End Class
Solução
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
Regras relacionadas
CA5364: Não use protocolos de segurança preteridos