CA5398:避免硬编码的 SslProtocols 值
属性 | 值 |
---|---|
规则 ID | CA5398 |
标题 | 避免硬编码的 SslProtocols 值 |
类别 | 安全性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 8 中默认启用 | 否 |
原因
如果满足以下任一条件,则会触发此规则:
- 引用了安全但硬编码的 System.Security.Authentication.SslProtocols 值。
- 表示安全协议版本的整数值已赋值给 SslProtocols 变量,用作 SslProtocols 返回值,或用作 SslProtocols 参数。
安全值为:
- 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