返回

如何启用 Linux-x64 系统上 .NET 6 中的 TLS 1.3?

Linux

在 Linux-x64 系统上启用 .NET 6 中的 TLS 1.3

TLS 1.3 是最新的安全协议,它提供了比其前身 TLS 1.2 更强的安全性。在 Linux-x64 系统上为 .NET 6 启用 TLS 1.3 可确保你的应用程序使用最新的安全标准。

问题

尽管将 handler.SslProtocols 设置为 SslProtocols.Tls13,但 Wireshark 显示 .NET 6 仍使用 TLS 1.2。

解决方案

先决条件

  • OpenSSL 1.1.1 或更高版本
  • GnuTLS 3.6.15 或更高版本

步骤

  1. 安装必要软件包

    • Ubuntu/Debian:sudo apt install libssl3 libssl-dev
    • CentOS/Red Hat:sudo yum install openssl-devel
  2. 配置 HttpClientHandler

    var handler = new HttpClientHandler();
    handler.SslProtocols = SslProtocols.Tls13;
    
  3. 禁用证书验证(仅用于测试)

    handler.ServerCertificateCustomValidationCallback += (HttpRequestMessage message, X509Certificate2? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors) => return true;
    
  4. 创建和使用 HttpClient

    var client = new HttpClient(handler);
    var result = client.GetAsync("https://127.0.0.1:3030/").Result;
    Console.WriteLine(result);
    

示例代码

using System.Net.Http;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    public static void Main(string[] args)
    {
        var handler = new HttpClientHandler
        {
            SslProtocols = SslProtocols.Tls13,
            ServerCertificateCustomValidationCallback = (HttpRequestMessage message, X509Certificate2? certificate, X509Chain? chain, SslPolicyErrors sslPolicyErrors) => return true
        };

        var client = new HttpClient(handler);
        var result = client.GetAsync("https://127.0.0.1:3030/").Result;
        Console.WriteLine(result);
    }
}

常见问题解答

Q1:为什么在设置 SslProtocols 后仍然使用 TLS 1.2?
A1:需要安装必要的软件包(OpenSSL/GnuTLS)并配置 HttpClientHandler

Q2:如何知道我的应用程序是否正在使用 TLS 1.3?
A2:使用 Wireshark 或其他工具检查网络流量,寻找 TLS 1.3 握手消息。

Q3:TLS 1.3 与 TLS 1.2 有何优势?
A3:TLS 1.3 具有更快的握手时间、增强的安全性和简化的密码套件。

Q4:如何解决禁用证书验证时遇到的错误?
A4:对于生产环境,不要禁用证书验证。但是,对于测试目的,可以使用自定义回调函数。

Q5:是否还需要配置服务器端以支持 TLS 1.3?
A5:是的,服务器也需要配置为支持 TLS 1.3。

结论

通过遵循这些步骤,你可以轻松地在 Linux-x64 系统上的 .NET 6 中启用 TLS 1.3。这样可以提高应用程序的安全性,并确保它使用最新的安全标准。