AWS RDS(SQL Server):SSL 连接-目标主体名称不正确

AWS RDS(SQL Server):SSL 连接-目标主体名称不正确

我有一个运行 SQL Server 2012 Express 的 Amazon Web Services (AWS) 关系数据库服务 (RDS) 实例。

我已经安装了亚马逊的aws.amazon.com/rds客户端计算机的受信任的根证书颁发机构存储中的证书。

但是,当我连接到 RDS 实例(使用 SQL Server Management Studio 2012)并选中“加密连接”时,出现以下错误:

已成功与服务器建立连接,但在登录过程中出现错误。(提供程序:SSL 提供程序,错误:0 - 目标主体名称不正确。)(Microsoft SQL Server)

这是什么意思?我该如何解决?谢谢!

答案1

为连接字符串添加此参数:TrustServerCertificate=true

就我的情况来说已经解决了。

答案2

最初我们使用了短名称,它似乎能用一段时间。但是,由于某种原因,它后来停止工作并抛出了此错误消息。

当我们将其更改为 FQDN 时,它似乎解决了该问题并再次允许它连接,因此任何遇到此问题的人,作为快速修复,可能需要检查他们是否仅使用服务器的短名称,如果是,请尝试使用完全限定域名。

答案3

出现该错误的原因是Amazon没有将颁发给服务器的SSL证书中的主题名称设置为RDS控制台中显示的DNS名称。

如果 RDS SQL 实例是在 VPC 中启动的,则服务器的 SSL 证书不幸永远无法通过验证,因为其主题 (CN) 是与分配给实例的公共 IP 不同的 IP 地址。TrustServerCertificate=true是在这种情况下使用 SSL 连接的唯一方法;提供了机密性(加密),但没有提供服务器身份验证。

如果 RDS SQL 实例是在 EC2-Classic 平台上启动的(即不在 VPC 中),则服务器的 SSL 证书的主题是以下形式的 DNS 名称ec2-NNN-NNN-NNN-NNN.RRRRR.amazonaws.com(其中 NNN-NNN-NNN-NNN 是实例的公共 IP 地址,RRRRR 取决于区域)。如果您在 Management Studio 中使用该 DNS 名称,则它应该可以无错误地连接。

我使用 nslookup 对 RDS 控制台中显示的 DNS 名称进行操作,发现了 ec2-... DNS 名称,即<name>.<region>.rds.amazon.com。可以使用网络监视器检查服务器提供的证书。

另请参阅“将 SSL 与 SQL Server 数据库实例结合使用”http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.html

相关内容