我正在尝试为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模式是正确的?是否可以仅验证服务器而不是客户端?
请帮帮我。
答案 0 :(得分:83)
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
。检查以下链接以获取更多信息:
答案 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"