雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

EF报错Win32Exception: 证书链是由不受信任的颁发机构颁发的。

2024-07-20 49

.NET8 EntityFrameworkCore连接数据库报错:

An unhandled exception occurred while processing the request.

Win32Exception: 证书链是由不受信任的颁发机构颁发的。

Unknown location

SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

Stack Query Cookies Headers Routing

Win32Exception: 证书链是由不受信任的颁发机构颁发的。

Show raw exception details

SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, bool callerHasConnectionLock, bool asyncClose)

Microsoft.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning(bool callerHasConnectionLock, bool asyncClose)

Microsoft.Data.SqlClient.TdsParserStateObject.SNIWritePacket(PacketHandle packet, out uint sniError, bool canAccumulate, bool callerHasConnectionLock, bool asyncClose)

Microsoft.Data.SqlClient.TdsParserStateObject.WriteSni(bool canAccumulate)

Microsoft.Data.SqlClient.TdsParserStateObject.WritePacket(byte flushMode, bool canAccumulate)

Microsoft.Data.SqlClient.TdsParser.TdsLogin(SqlLogin rec, FeatureExtension requestedFeatures, SessionData recoverySessionData, FederatedAuthenticationFeatureExtensionData fedAuthFeatureExtensionData, SqlConnectionEncryptOption encrypt)

原因

如果满足以下两个条件,则会发生这些错误:

SQL Server 实例的“强制加密”设置为“否”。

客户端连接字符串未显式指定加密属性的值,或者未在 DSN 中显式设置或更新 加密 选项。

发生此错误的原因是客户端驱动程序的默认行为发生了更改。 旧版客户端驱动程序旨在假定默认情况下数据加密为 OFF 。 新驱动程序假定此设置默认为 ON 。 由于数据加密设置为 ON,因此驱动程序会尝试验证服务器的证书,但失败。

解决方案

解决方案 1:使用 Microsoft OLE DB Driver for SQL Server 18.x。 可以从Microsoft OLE DB Driver for SQL Server的发行说明下载驱动程序。

解决方案 2:如果应用程序连接字符串属性已经为“加密/使用数据加密”设置指定了“是”或“必需”值,请将值更改为“否”或“可选”。 例如, 对数据使用加密=可选。 如果连接字符串未为 “加密/使用数据加密”指定任何值,请在连接字符串中添加 “对数据使用加密=可选 ”。 有关详细信息,请参阅 加密和证书验证。

解决方案 3(推荐): 将 添加到 ;TrustServerCertificate=true 连接字符串。 这将强制客户端在不验证的情况下信任证书。

参考:https://learn.microsoft.com/zh-cn/troubleshoot/sql/database-engine/connect/certificate-chain-not-trusted?tabs=ole-db-driver-19

更新于:2个月前
赞一波!1

文章评论

全部评论