我有四个相同的环境,其中包含运行 IIS 和 Microsoft SQL Server 2019 的 Windows Server 2019 服务器。IIS 服务器上的 ASP.NET 4.7.2 应用程序通过各种方式(实体框架、ADO.NET)定期访问 SQL 服务器上的数据库。我们将这些环境称为 DEV、UAT、STAGE 和 PROD。没有任何 SQL 服务器被配置为对 SQL SERVER 进程使用 SSL 证书,并且每个 IIS 服务器都已由我们自己的 CA 颁发了证书。
仅在我们的 DEV 环境中,ADO.NET 连接就经常出现问题,我们收到带有错误消息的异常:
证书链是由不受信任的机构颁发的。
执行 SQLCommand 时。同一 IIS 服务器上使用实体框架访问同一 SQL 服务器的另一个应用程序不受影响。 SQL Server Management Studio 也不受影响。
我在客户端应用程序中尝试了各种建议的解决方案,但没有成功:
TrustServerCertificate=true
Encrypt=false
System.Data.SqlClient
更新为 Microsoft.Data.SqlClient
我无法辨别我们的环境之间任何有意义的配置差异。
我应该检查是否有任何可能的 IIS 或 SQL Server 配置问题可以解决此问题?
如果您仅在 SQL 命令上收到此错误;
在运行 SQL 命令的计算机及其尝试连接的 IIS 和 SQL Server 上启用 CAPI2 事件日志。
在运行 SQL 命令的计算机以及它尝试连接的 IIS 和 SQL Server 上启用 Schannel 日志记录(您可以设置 7 = 记录注册表中的所有信息值)
参考:“https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/health-diagnostic-performance/enable-schannel-event-logging”
您可能会在 CAPI2 和 Schannel 日志中找到必要的进程 ID 和证书信任问题的详细信息,以及有问题的证书的详细信息。找到证书后,立即找到从中检索证书的服务器。在具有此证书的服务器上,解决有关过期、无效、撤销条件的任何问题,然后确保运行 sql 命令的客户端 PC(也可能在 IIS 服务器上,具体取决于在您的申请上)