【问题标题】:PostgreSQL connection require a valid client certificatePostgreSQL 连接需要有效的客户端证书
【发布时间】:2021-07-19 06:51:05
【问题描述】:

我正在尝试使用 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 确认证书是好的。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    在尝试使用 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';
    

    如果您不想使用根证书集 sslmoderequire

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-22
      • 2012-10-01
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2012-08-25
      • 2018-08-11
      相关资源
      最近更新 更多