簡體   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