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

Propriété Value
Identificateur de la règle CA5386
Titre Éviter tout codage en dur de la valeur de SecurityProtocolType
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 sécurisées sont les suivantes :

  • Tls12
  • Tls13

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 TLS 1.0 et TLS 1.1 sont déconseillées, tandis que TLS 1.2 et TLS 1.3 sont à jour. À l’avenir, TLS 1.2 et TLS 1.3 peuvent être dépréciés. Pour vous assurer que votre application reste sécurisée, évitez de coder en dur une version de protocole et ciblez au moins .NET Framework v4.7.1. Pour plus d’informations, consultez Meilleures pratiques TLS (Transport Layer Security) avec .NET Framework.

Comment corriger les violations

Ne codez pas en dur les versions du protocole TLS.

Quand supprimer les avertissements

Vous pouvez supprimer cet avertissement si votre application cible est .NET Framework v4.6.2 ou une version antérieure et peut s’exécuter sur un ordinateur qui a des valeurs par défaut non 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 CA5386
// The code that's violating the rule is on this line.
#pragma warning restore CA5386

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.CA5386.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.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

Violation de valeur entière

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

Solution

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 : Ne pas utiliser de protocoles de sécurité dépréciés

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

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