CA5398:避免硬编码的 SslProtocols 值

属性
规则 ID CA5398
标题 避免硬编码的 SslProtocols 值
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

如果满足以下任一条件,则会触发此规则:

安全值为:

  • Tls12
  • Tls13

规则说明

传输层安全性 (TLS) 通常使用安全超文本传输协议 (HTTPS) 保障计算机之间的通信安全。 协议版本 TLS 1.0 和 TLS 1.1 已弃用,目前使用 TLS 1.2 和 TLS 1.3。 将来可能也会弃用 TLS 1.2 和 TLS 1.3。 要确保应用程序的安全性,请避免对协议版本进行硬编码。 有关详细信息,请参阅 .NET Framework 中的传输层安全性 (TLS) 最佳做法

如何解决冲突

不要对 TLS 协议版本进行硬编码。

何时禁止显示警告

如果需要连接到无法升级为使用将来的 TLS 协议版本的旧服务,可以禁止显示警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

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

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

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

有关详细信息,请参阅如何禁止显示代码分析警告

伪代码示例

枚举名称冲突

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

整数值冲突

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

解决方案

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:不使用已弃用的安全协议

CA5386:避免对 SecurityProtocolType 值进行硬编码

CA5397:不使用已弃用的 SslProtocols 值