PostgreSQL连接需要有效的客户端证书

时间:2018-08-10 19:55:59

标签: postgresql

我试图在Delphi中使用FireDac通过SSL连接到PostgreSQL。我已按照以下站点上的说明进行操作: https://www.howtoforge.com/postgresql-ssl-certificates

我已经创建了所有证书。按指定配置postgreql.conf,使其指向所需的文件。将指定的文件复制到客户端计算机并安装root.crt证书。

通过FireDAC的连接参数,我指定了以下内容:

Params.values[SSL_ca']:=sslCertsPath+'root.crt';
Params.values['SSL_cert']:=sslCertsPath+'postgresql.crt.';
Params.values['SSL_key']:=sslCertsPath+'postgresql.key';

我收到连接错误,客户端证书无效。我不确定它指的是哪个证书,以及为什么它无效。我是否通过连接的参数指定了正确的客户端证书?如果是这样,请问我为什么会出现错误的任何建议?

OpenSSL针对root.crt和postgresql.crt进行验证,以确认证书没有问题。

1 个答案:

答案 0 :(得分:0)

经过3个多星期的尝试,尝试使用FireDAC使用SSL设置PostgreSQL后,我终于弄清了问题所在和解决方案。

对于希望使用FireDAC进行连接的任何人,howtoforge指南(请参阅原始文章中的链接)都可以正常工作。

但是,请勿在我的原始帖子中使用FireDAC参数。 PostgreSQL不使用它们。您需要使用PGAdvanced参数。

但是即使弄清楚了这一点,我仍然无法在数周内使它正常工作,直到测试后我收到一条错误消息,该错误消息最终使我清楚自己在做什么错。在Windows上,PostgreSQL会删除路径定界符,除非您对其进行转义(就我所知,PostgreSQL或FireDAC帮助文件中并未提及)。

下面是使用FireDac参数用于ssl进行连接的正确方法的示例

Params.values['PGAdvanced']:='sslmode=verify-ca sslrootcert=C:\\ProgramData\\MWC\\Viewer\\Certs\\root.crt sslcert=C:\\ProgramData\\MWC\\Viewer\\Certs\\postgresql.crt sslkey=C:\\ProgramData\\MWC\\Viewer\\Certs\\postgresql.key';

如果您不想使用根证书,请将sslmode设置为require