CA5398 : Éviter les valeurs SslProtocols codées en dur
Propriété | Value |
---|---|
Identificateur de la règle | CA5398 |
Titre | Éviter les valeurs SslProtocols codées en dur |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | Non |
Cause
Cette règle se déclenche lorsque l’une des conditions suivantes est remplie :
- Une valeur System.Security.Authentication.SslProtocols sûre mais codée en dur a été référencée.
- Une valeur entière représentant une version de protocole sécurisée a été affectée à une variable SslProtocols, utilisée comme valeur de retour SslProtocols, ou utilisée comme argument SslProtocols.
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 garantir la sécurité de votre application, évitez de coder en dur une version de protocole. Pour plus d’informations, consultez Bonnes pratiques du protocole TLS (Transport Layer Security) avec le .NET Framework.
Comment corriger les violations
Ne codez pas en dur les versions du protocole TLS.
Quand supprimer les avertissements
Vous pouvez sans risque supprimer un avertissement si vous devez vous connecter à un service hérité qui ne peut pas être mis à niveau de façon à utiliser les versions ultérieures du protocole TLS.
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 CA5398
// The code that's violating the rule is on this line.
#pragma warning restore CA5398
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.CA5398.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()
{
// 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
Violation de valeur entière
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
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
Règles associées
CA5364 : Ne pas utiliser de protocoles de sécurité dépréciés
CA5386 : Éviter tout codage en dur de la valeur de SecurityProtocolType