You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Encrypt=Strict无法在System.Data.SqlClient中建立TLS 1.3连接?

关于System.Data.SqlClient与SQL Server 2022建立TLS 1.3连接的问题

我希望在System.Data.SqlClient与SQL Server 2022之间建立TLS 1.3协议通信。根据微软TDS8文档要求,需在连接字符串中添加Encrypt=Strict来建立TLS 1.3连接,但添加后抛出「Invalid value for key 'encrypt'」错误。当设置encrypt=true时,仅能建立TLS 1.2连接(已使用合规证书)。看起来encrypt仅支持true/false值,不支持strict/optional/mandatory,尽管微软文档有相关建议。

示例代码

using System.Data.SqlClient;

namespace SQLClient
{
    internal class Program
    {
        //sql conn string
        static string sConnStringRemoteSql2k22 = "Encrypt=Strict;Password=Password@123;Persist Security Info=True;User ID=sa;Initial Catalog=Testdb;Data Source=sql2k22.test.com;Application Name=test";
        
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection(sConnStringRemoteSql2k22);

            try
            {
                string query = "Select * from Players";
                conn.Open();

                SqlCommand cmd = new SqlCommand(query, conn);

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        Console.WriteLine(dr["Name"].ToString() + " " + dr["dept"].ToString());
                    }
                }
            }
            finally
            {
                conn.Close();
            }

            Console.ReadLine();
        }
    }
}

环境信息

  • Microsoft SQL Server 2022 (RTM-CU10) (KB5031778) - 16.0.4095.4 (X64) Express Edition (64-bit) on Windows Server 2022 Standard 10.0 (Build 20348: ) (Hypervisor)
  • .NET Framework 4.8.1
  • System.Data version 4.0.0.0
  • OS: Windows Server 2022

提问

请问为何Encrypt=Strict无法与SqlClient配合使用?或需添加其他参数来建立TLS 1.3连接?


问题原因

System.Data.SqlClient(旧版SqlClient)并不支持Encrypt=Strict这个连接字符串参数,它仅支持true/false两个值。Encrypt参数的扩展值(Strict/Optional/Mandatory)是新版Microsoft.Data.SqlClient才引入的特性,用于支持TDS 8.0和TLS 1.3协议。

解决方案

要建立TLS 1.3连接,你需要做以下调整:

  1. 替换为Microsoft.Data.SqlClient:将项目中的System.Data.SqlClient引用替换为Microsoft.Data.SqlClient NuGet包(建议使用最新稳定版)。
  2. 修改连接字符串:使用Encrypt=Strict,同时可以添加TrustServerCertificate=false(确保证书验证合规),连接字符串示例:
    Encrypt=Strict;TrustServerCertificate=false;Password=Password@123;Persist Security Info=True;User ID=sa;Initial Catalog=Testdb;Data Source=sql2k22.test.com;Application Name=test
    
  3. 确认系统配置:Windows Server 2022默认支持TLS 1.3,确保SQL Server 2022已启用TLS 1.3(可通过SQL Server配置管理器确认协议启用状态)。

补充说明

如果因项目限制无法升级到Microsoft.Data.SqlClient,旧版System.Data.SqlClient在.NET Framework 4.8.1环境下,即使设置Encrypt=true也只能协商到TLS 1.2,因为它本身不支持TDS 8.0和TLS 1.3协议,没有对应的实现逻辑。


内容的提问来源于stack exchange,提问作者Mangesh Auti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:33:23