CA5397 : Ne pas utiliser de valeurs SslProtocols dépréciées

Propriété Value
Identificateur de la règle CA5397
Titre Ne pas utiliser de valeurs SslProtocols dépréciées
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Cette règle se déclenche lorsque l’une des conditions suivantes est remplie :

Les valeurs dépréciées sont les suivantes :

  • Ssl2
  • Ssl3
  • Tls
  • Tls10
  • Tls11

Description de la règle

TLS (Transport Layer Security) sécurise la communication entre les ordinateurs, le plus souvent avec HTTPS (Hypertext Transfer Protocol Secure). Les versions de protocole plus anciennes de TLS sont moins sécurisées que TLS 1.2 et TLS 1.3 et sont plus susceptibles d’avoir de nouvelles vulnérabilités. Évitez les anciennes versions de protocole pour réduire les risques. Pour obtenir des conseils sur l’identification et la suppression des versions de protocole dépréciées, consultez Résolution du problème TLS 1.0, 2e édition.

Comment corriger les violations

N’utilisez pas de versions de protocole TLS dépréciées.

Quand supprimer les avertissements

Vous pouvez supprimer cet avertissement si :

  • La référence à la version de protocole dépréciée n’est pas utilisée pour activer une version déconseillée.
  • Vous devez vous connecter à un service hérité qui ne peut pas être mis à niveau pour utiliser des configurations TLS sécurisées.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation du nom d’énumération

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5397 violation for using Tls11
        SslProtocols protocols = SslProtocols.Tls11 | SslProtocols.Tls12;
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5397 violation for using Tls11
        Dim sslProtocols As SslProtocols = SslProtocols.Tls11 Or SslProtocols.Tls12
    End Sub
End Class

Violation de valeur entière

using System;
using System.Security.Authentication;

public class ExampleClass
{
    public void ExampleMethod()
    {
        // CA5397 violation
        SslProtocols sslProtocols = (SslProtocols) 768;    // TLS 1.1
    }
}
Imports System
Imports System.Security.Authentication

Public Class TestClass
    Public Sub ExampleMethod()
        ' CA5397 violation
        Dim sslProtocols As SslProtocols = CType(768, SslProtocols)   ' TLS 1.1
    End Sub
End Class

Solution

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

CA5364 : Ne pas utiliser de protocoles de sécurité dépréciés

CA5386 : Éviter tout codage en dur de la valeur de SecurityProtocolType

CA5398 : Éviter les valeurs SslProtocols codées en dur