我在从Azure网站连接我的DB时遇到了一个错误,它是在虚拟机角色(我有SQL虚拟机角色)。VM Role和Azure Website都在West zone。我面临着以下问题:

SqlException (0x80131904):成功建立了与服务器的连接,但是在登录过程中发生了错误。(提供者:SSL提供者,错误:0 -证书链是由一个不受信任的机构颁发的。)]

我可以使用SSMS连接到我的DB。虚拟机角色的1433端口是开放的。 我的连接有什么问题?


当前回答

2022年更新-这个答案(正如评论所指出的)提供了一个解释和弥补差距,但也提供了一些更好的建议,包括购买和安装一个适当的证书(感谢大量的社区编辑)。

请参阅本线程中其他高投票的答案,包括下面来自Jitbit的@Alex关于从System.Data.Sql迁移到Microsoft.Data.Sql时的破坏性更改(剧透:加密现在默认设置为true)。

最初的回答:

您的SQL VM的可信根存储中可能没有安装CA签名证书。

如果你在连接字符串中有Encrypt=True,要么将其设置为关闭(不推荐),要么在连接字符串中添加以下内容(也不推荐):

TrustServerCertificate=True

如果您不安装自签名证书供SQL Server使用,则SQL Server将创建一个自签名证书,但调用者不会信任它,因为它不是ca签名的,除非您默认告诉连接字符串信任任何服务器证书。

从长期来看,我建议利用Let’s Encrypt从已知的受信任CA免费获得CA签名证书,并将其安装在VM上。不要忘记将其设置为自动刷新。你可以在“加密层次结构”和“使用未经验证的加密”的主题下在线阅读SQL Server书籍中关于这个主题的更多信息。

其他回答

短的通知。如果您正在使用AWS RDS,您可以从truststore.pki.rds.amazonaws.com获得证书。有关特定链接的详细信息可以在本文档中找到:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html。

只需下载适当的证书并将其安装到您的主机上。

在我的例子中,扩展连接字符串是不够的 加密= false; TrustServerCertificate = true;

我仍然需要在NuGet控制台输入:

- database就- verbose

2022年更新-这个答案(正如评论所指出的)提供了一个解释和弥补差距,但也提供了一些更好的建议,包括购买和安装一个适当的证书(感谢大量的社区编辑)。

请参阅本线程中其他高投票的答案,包括下面来自Jitbit的@Alex关于从System.Data.Sql迁移到Microsoft.Data.Sql时的破坏性更改(剧透:加密现在默认设置为true)。

最初的回答:

您的SQL VM的可信根存储中可能没有安装CA签名证书。

如果你在连接字符串中有Encrypt=True,要么将其设置为关闭(不推荐),要么在连接字符串中添加以下内容(也不推荐):

TrustServerCertificate=True

如果您不安装自签名证书供SQL Server使用,则SQL Server将创建一个自签名证书,但调用者不会信任它,因为它不是ca签名的,除非您默认告诉连接字符串信任任何服务器证书。

从长期来看,我建议利用Let’s Encrypt从已知的受信任CA免费获得CA签名证书,并将其安装在VM上。不要忘记将其设置为自动刷新。你可以在“加密层次结构”和“使用未经验证的加密”的主题下在线阅读SQL Server书籍中关于这个主题的更多信息。

如果您试图通过Visual Studio 2015中的数据连接访问它,并得到上述错误,那么转到高级并设置 TrustServerCertificate = True 让错误消失。

"ConnectionStrings": {
    "DefaultConnection": "Server=DESKTOP-O5SR0H0\\SQLEXPRESS;Database=myDataBase;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}