CA5398: Evite valores SslProtocols codificados
Propriedade | valor |
---|---|
ID da regra | CA5398 |
Cargo | Evite valores SslProtocols codificados |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Causa
Esta regra é acionada quando uma das seguintes condições é atendida:
- Um valor seguro, mas codificado, System.Security.Authentication.SslProtocols foi referenciado.
- Um valor inteiro representando uma versão segura do protocolo foi atribuído a uma SslProtocols variável, usado como um SslProtocols valor de retorno ou usado como um SslProtocols argumento.
Os valores seguros são:
- TLS12
- TLS13
Descrição da regra
Transport Layer Security (TLS) protege a comunicação entre computadores, mais comumente com HTTPS (Hypertext Transfer Protocol Secure). As versões de protocolo TLS 1.0 e TLS 1.1 foram preteridas, enquanto TLS 1.2 e TLS 1.3 são 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 do protocolo. Para obter mais informações, consulte Práticas recomendadas de TLS (Transport Layer Security) com o .NET Framework.
Como corrigir violações
Não codifice versões do protocolo TLS.
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
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5398.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação de nome de 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 de 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://video2.skills-academy.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://video2.skills-academy.com/dotnet/framework/network-programming/tls
Dim sslProtocols As SslProtocols = SslProtocols.None
End Sub
End Class
Regras conexas
CA5364: Não use protocolos de segurança preteridos