连接到需要SSL的AWS Postgres数据库时,我收到以下错误。我最近从npgsql 2.3.2(有缺陷)升级到3.0.3,它不会连接。任何建议将不胜感激。
DataSource.Error:TlsClientStream.ClientAlertException: CertificateUnknown:不接受服务器证书。连锁状态: 无法将证书链构建到受信任的根颁发机构。 。 在TlsClientStream.TlsClientStream.ParseCertificateMessage(Byte [] buf, INT32和放大器; pos)at TlsClientStream.TlsClientStream.TraverseHandshakeMessages()at TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(布尔 allowApplicationData)at TlsClientStream.TlsClientStream.PerformInitialHandshake(字符串 hostName,X509CertificateCollection clientCertificates, RemoteCertificateValidationCallback remoteCertificateValidationCallback,Boolean checkCertificateRevocation)详细信息: DataSourceKind = PostgreSQL的
答案 0 :(得分:7)
我能够通过在我的计算机上安装Amazon RDS公共证书来解决此问题。一旦我这样做,我就可以连接。
我遵循的步骤:
答案 1 :(得分:5)
来自npgsql的文档提供了解决方案,即在连接字符串中将“false”的默认信任服务器证书更改为“true”。 不幸的是,Excel(AFAIK)和Power BI都不允许您编辑连接字符串。因此,如果您无法从数据库管理员那里获得SSL证书(如another answer中所述),或者SSL证书与您连接的名称(在我的情况下是IP地址)具有不同的服务器名称,那么可以做的并不多。
我可以看到两种方法来解决这个问题。 Shay&来自npgsql(他的工作做得非常出色)的co为用户提供了一些方法来更改connection string parameters的默认设置。或者Microsoft允许用户在Power BI(和Excel)的连接对话框中发送关键字。
答案 2 :(得分:3)
默认情况下,Npgsql 2.x未对服务器证书执行验证,因此接受了自签名证书。新的默认设置是执行验证,这可能是您的连接失败的原因。指定信任服务器证书连接字符串参数以恢复先前的行为。
您可以在Npgsql security doc page上阅读更多内容,同时注意我们的migration notes中提到了此更改。
答案 3 :(得分:3)
我在将PowerBI连接到本地托管的PostgreSQL服务器时遇到了同样的问题,如果您能获得正确的信息,那么它很容易解决。最近的Npgsql版本只有在信任服务器证书的情况下才能通过SSL连接。作为Windows应用程序,PowerBI使用Windows证书存储来决定信任什么。如果您可以获得PostgreSQL服务器的SSL证书(或用于签署该证书的CA证书),那么告诉Windows信任该证书,PowerBI也会信任它。
在PostgreSQL服务器的配置文件夹中有一个postgresql.conf文件,搜索ssl设置,有一个带有ssl cert的位置。注意不是包含私钥的密钥文件,只包含包含公钥的证书文件。将它或其内容复制到运行PowerBI的计算机上并使用Run |导入mmc |添加插件...证书(Google it)
导入证书后,查看服务器名称,并使用相同的服务器名称从PowerBI连接(因此证书与连接匹配)。这解决了我的问题。如果PostgreSQL配置为坚持SSL连接,您可能也必须对ODBC连接执行相同的操作。
答案 4 :(得分:0)
这不是最好的方式,但是对我来说很有用,因为如果出于安全原因你不需要加密。
转到数据库服务器上的Postgres配置文件,然后从
转到ssl = true
到
ssl = false
然后打开你的电源bi桌面文件 - >选项和设置 - >数据源设置 - >然后在全局中你将保存你的连接按编辑权限并取消选中“ENCRYPT CONNECTIONS”
然后它会起作用
警告:如果您的数据库向公众公开,则不建议您这样做。
此致
Davlik