使用psql以SSL模式连接到PostgreSQL



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

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

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

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

但是我得到

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

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

9.2以下的psql不接受类似URL的选项语法。

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

带有conninfo字符串的示例(为psql8.4更新(

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

阅读手册页面了解更多选项。

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

如果连接需要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" 

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

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

在psql客户端v12上,我在psql客户机中找不到激活sslmode=verify-full的选项。

我最终使用了环境变量:

PGSSLMODE=verify-full PGSSLROOTCERT=server-ca.pem psql -h your_host -U your_user -W -d your_db

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

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

psql -h <host> -p <port> -U <user> -d <db>

并更新CCD_ 6以将认证方法改变为CCD_。查看以下链接了解更多信息:

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

v8的另一种模式是

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

您可以尝试将这些添加到连接字符串中"持久安全信息=True;SSL模式=需要";

最新更新