我试图在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进行验证,以确认证书没有问题。
答案 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
。