使用psql以ssl模式连接到postgresql

时间:2012-12-24 13:25:31

标签: postgresql ssl ssl-certificate postgresql-8.4

我正在尝试为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模式是正确的?是否可以仅验证服务器而不是客户端?

请帮帮我。

8 个答案:

答案 0 :(得分:83)

9.2下面的

psql不接受这种类似URL的语法。

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

conninfo字符串示例(为psql 8.4更新

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

阅读manual page了解更多选项。

答案 1 :(得分:10)

psql --set=sslmode=require -h localhost -p 2345 -U thirunas \
-d postgres -f test_schema.ddl

答案 2 :(得分:3)

在psql客户端v12上,我在psql客户端中找不到激活http-server的选项。

我最终使用了环境变量:

sslmode=verify-full

答案 3 :(得分:2)

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

psql "host={hostname} sslmode=prefer sslrootcert={ca-cert.pem} sslcert={client-cert.pem} sslkey={client-key.pem} port={port} user={user} dbname={db}"

答案 4 :(得分:1)

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

答案 5 :(得分:0)

  

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

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

答案 6 :(得分:0)

好吧,如果在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" 

答案 7 :(得分:0)

另一个适用于 v8 的模式是

<块引用>

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