Npgsql 3.0.3在Power BI Desktop中出现错误

9

连接到需要SSL的AWS Postgres数据库时,我收到了以下错误。最近我从有问题的npgsql 2.3.2升级到3.0.3,但无法连接。如有建议,请告知。

DataSource.Error: TlsClientStream.ClientAlertException: CertificateUnknown: 服务器证书未被接受。链状态: 无法构建到受信任根机构的证书链。. at TlsClientStream.TlsClientStream.ParseCertificateMessage(Byte[] buf, Int32& pos) at TlsClientStream.TlsClientStream.TraverseHandshakeMessages() at TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(Boolean allowApplicationData) at TlsClientStream.TlsClientStream.PerformInitialHandshake(String hostName, X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback, Boolean checkCertificateRevocation) 详细信息: DataSourceKind=PostgreSQL

5个回答

9

我成功解决了这个问题,方法是在我的计算机上安装了Amazon RDS公共证书。一旦我这样做了,我就能够连接。

我遵循的步骤:

  1. 下载AWS RDS公共证书 1
  2. 从下载的.pem文件创建一个.crt文件。示例说明在这里 2
  3. 在计算机上安装证书(.crt文件) 3
  4. 连接!

1
我已经执行了这三个步骤,但仍然无法连接。错误仍然存在。可能的原因是什么? - Luv33preet

5
npgsql的文档中得知,解决方法是在连接字符串中将默认的trust server certificate从“false”改为“true”。不幸的是,Excel(据我所知)和Power BI都不允许您编辑连接字符串。因此,如果您无法从DB管理员(如另一个答案中建议的方式)获取SSL证书,或者SSL证书与您连接的服务器名称(在我的情况下是IP地址)不同,则无法解决这个问题。

我认为有两种解决方法。一种是由npqsql的Shay和他的团队(顺便说一句,他们做得非常好)为用户提供更改连接字符串参数默认设置的方法。另一种是Microsoft允许用户在Power BI(和Excel)的连接对话框中发送关键词。


2
感谢您的评论,Larry,非常感激和认可。然而,由于我现在已经花费了三整天以上的时间去寻找解决这个问题的方法,但却毫无进展,所以我认为提供一个回答说明目前没有解决这个问题的方法是很有价值的。这可能会避免后续用户经历与我相同的困境。 - a-burge

3
Npgsql 2.x 默认情况下不对服务器证书执行验证,因此接受自签名证书。新的默认设置是执行验证,这可能是您连接失败的原因。指定“Trust Server Certificate”连接字符串参数以恢复以前的行为。
您可以阅读Npgsql安全文档页面了解更多信息,还请注意我们在迁移说明中提到的更改。

那非常有帮助。不幸的是,Power BI Desktop 不允许直接编辑连接字符串。我将向Microsoft报告此问题以得到解决。 - Jon Capezzuto
再次声明,我对Power BI一无所知,但请注意新的“Trust Server Certificate”参数是“标准”参数,在SqlClient中受支持。你应该可以通过某种方式访问连接字符串... - Shay Rojansky
Jon Capezzuto,你收到微软的回复了吗? - user541905

3
我曾经遇到了与本地托管的PostgreSQL服务器连接的问题,如果您能获得正确的信息,那么解决问题将变得轻而易举。最近的Npgsql版本只有在信任服务器证书时才会通过SSL连接。作为一个Windows应用程序,PowerBI使用Windows证书存储来决定信任什么。如果您可以获取PostgreSQL服务器的SSL证书(或用于签署该证书的CA证书),然后告诉Windows信任该证书,PowerBI也会信任它。
在PostgreSQL服务器的配置文件夹中有一个postgresql.conf文件,请搜索其中的ssl设置,其中有一个包含ssl证书位置的设置。请注意,不是包含私钥的密钥文件,而是包含公钥的证书文件。将其复制或其内容复制到运行PowerBI的计算机上,并使用Run | mmc | Add Plugin... Certificates(Google it)导入。
在导入证书后查看服务器名称,并使用相同的服务器名称从PowerBI连接(以便证书与连接匹配)。这对我解决了问题。如果PostgreSQL被配置为坚持使用SSL连接,则对ODBC连接也可能需要执行相同的操作。

如何在Excel中导入PostgreSQL证书? - Luv33preet
开始 > 运行 > mmc.exe。 文件 > 添加/删除控件; 独立选项卡 > 添加; 证书控件 > 点击添加; 向导 > 计算机帐户> 本地计算机> 完成。 关闭对话框。 导航到证书(本地计算机)。 如果您拥有服务器本身的证书,请选择其他人。 右键单击存储并选择所有任务 --> 导入。 按照向导提供您拥有的证书文件。 - Ruan Malan
实际上我已经导入了,但是我一直收到相同的错误,描述为服务器名称未包含在证书中。 - Luv33preet

1

这不是最好的方法,但如果您不需要加密以保障安全性,它对我有用。

转到您的DB服务器上的Postgres配置文件,从

ssl = true

ssl = false

然后打开您的Power BI桌面 文件->选项和设置->数据源设置->然后在全局中,您将保存了连接,按“编辑权限”并取消勾选“加密连接”

然后它就会工作了。

警告:如果您的DB对公众开放,不建议使用此方法。

祝好,

Davlik


1
这里无法强调警告的重要性。 - Per Lundberg
可以了,兄弟。无论如何,对于内部开发来说,我很满意继续前进,感谢您的大力帮助。 - praveen2609

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接