繁体   English   中英

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

[英]PostgreSQL connection require a valid client certificate

我正在尝试在 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 确认证书没问题。

在尝试使用 FireDAC 使用 SSL 设置 PostgreSQL 超过 3 周的挫折之后,我终于弄清楚了问题所在以及解决方案是什么。

对于希望使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM