99

我正在尝试为 PostgreSQL 服务器配置 ssl 证书。我在数据目录中创建了一个证书文件(server.crt)和密钥(server.key),并将参数 SSL 更新为“on”以启用安全连接。

我只希望服务器在客户端使用服务器证书进行身份验证,并且不需要服务器端客户端的真实性。我使用 psql 作为客户端来连接和执行命令。

我正在使用 PostgreSQL 8.4 和 Linux。我尝试使用以下命令连接到启用 SSL 的服务器

       psql "postgresql://localhost:2345/postgres?sslmode=require"

但我得到

       psql: invalid connection option "postgresql://localhost:2345/postgres?sslmode"

这里做错了什么?我尝试连接到启用 SSL 模式的服务器的方式是否正确?只验证服务器而不验证客户端是否可以?

4

8 回答 8

131

psql9.2 以下的选项不接受这种类似 URL 的语法。

SSL 的使用可以通过sslmode=value命令行上的选项或PGSSLMODE环境变量来驱动,但默认情况下prefer,SSL 连接将首先自动尝试,无需指定任何内容。

带有 conninfo 字符串的示例(针对 psql 8.4 更新

psql "sslmode=require host=localhost dbname=test"

阅读手册页以获取更多选项。

于 2012-12-24T14:17:21.803 回答
31
psql --set=sslmode=require -h localhost -p 2345 -U thirunas \
-d postgres -f test_schema.ddl

另一个安全连接到 Azure 托管 Postgres 数据库的示例:

psql --file=product_data.sql --host=hostname.postgres.database.azure.com --port=5432 \
--username=postgres@postgres-esprit --dbname=product_data \
--set=sslmode=verify-full --set=sslrootcert=/opt/ssl/BaltimoreCyberTrustRoot.crt.pem
于 2016-05-13T15:07:36.693 回答
8

发现以下选项可用于为自签名 postgres 实例提供所有文件

psql "host={hostname} sslmode=prefer sslrootcert={ca-cert.pem} sslcert={client-cert.pem} sslkey={client-key.pem} port={port} user={user} dbname={db}"
于 2019-10-03T08:11:08.953 回答
7

在 psql 客户端 v12 上,我无法在 psql 客户端中找到激活sslmode=verify-full.

我最终使用了环境变量:

PGSSLMODE=verify-full PGSSLROOTCERT=server-ca.pem psql -h your_host -U your_user -W -d your_db
于 2020-07-08T09:20:14.297 回答
5

好吧,如果连接需要在 SSL 模式下,您可以在 CLI 中使用以下命令提供所有信息:

psql "sslmode=verify-ca sslrootcert=server-ca.pem sslcert=client-cert.pem sslkey=client-key.pem hostaddr=your_host port=5432 user=your_user dbname=your_db" 
于 2020-01-03T18:45:28.053 回答
3

psql "sslmode=require host=localhost port=2345 dbname=postgres" --username=some_user

根据postgres psql 文档,只有连接参数应该放在 conninfo 字符串中(这就是为什么在我们的示例中,--username 不在该字符串中)

于 2016-03-10T11:34:20.687 回答
2
psql -h <host> -p <port> -U <user> -d <db>

并更新/var/lib/pgsql/10/data/pg_hba.conf以将 auth 方法更改为cert. 检查以下链接以获取更多信息:

https://www.postgresql.org/docs/9.1/auth-pg-hba-conf.html

于 2019-02-06T16:41:10.737 回答
1

另一个适用于 v8 的模式是

psql -h 主机名 -p 端口 -U 用户名 "dbname=db sslmode=require"

于 2021-06-16T21:35:17.920 回答