CA5364:不使用已弃用的安全协议
属性 | 值 |
---|---|
规则 ID | CA5364 |
标题 | 不使用已弃用的安全协议 |
类别 | 安全性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 否 |
原因
如果满足以下任一条件,则会触发此规则:
- 引用了已弃用的 System.Net.SecurityProtocolType 值。
- 表示已弃用的值分配到 SecurityProtocolType 变量的整数值。
已弃用的值包括:
- Ssl3
- Tls
- Tls10
- Tls11
规则说明
传输层安全性 (TLS) 通常使用安全超文本传输协议 (HTTPS) 保障计算机之间的通信安全。 早期版本的 TLS 协议不如 TLS 1.2 和 TLS 1.3 安全,且更容易出现新的漏洞。 避免使用旧版本的协议,以便最大程度降低风险。 有关标识和删除已弃用协议版本的指导,请参阅解决 TLS 1.0 问题(第 2 版)。
如何解决冲突
请勿使用已弃用的 TLS 协议版本。
何时禁止显示警告
如果出现以下情况,可禁止显示此警告:
- 未使用对已弃用协议版本的引用来启用已弃用的版本。
- 连接到无法升级为使用安全 TLS 配置的旧服务。
抑制警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA5364
// The code that's violating the rule is on this line.
#pragma warning restore CA5364
若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none
。
[*.{cs,vb}]
dotnet_diagnostic.CA5364.severity = none
有关详细信息,请参阅如何禁止显示代码分析警告。
伪代码示例
枚举名称冲突
using System;
using System.Net;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5364 violation
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
}
}
Imports System
Imports System.Net
Public Class TestClass
Public Sub ExampleMethod()
' CA5364 violation
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
End Sub
End Class
整数值冲突
using System;
using System.Net;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5364 violation
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 768; // TLS 1.1
}
}
Imports System
Imports System.Net
Public Class TestClass
Public Sub ExampleMethod()
' CA5364 violation
ServicePointManager.SecurityProtocol = CType(768, SecurityProtocolType) ' TLS 1.1
End Sub
End Class
解决方案
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