如何使用 Postgres 在服务器和客户端之间使用 SSL/TLS?

Val*_*lva 2 postgresql ubuntu

我对安全性了解不多。我正在云服务中使用我的数据库部署虚拟机。我想加密此服务器与任何客户端之间的所有通信。我怎样才能做到这一点 ?

更多信息: 我已经从 postgres 文档 [ 1 , 2 ] 中阅读了很多材料,但我对其中的内容了解不多。我遵循了本教程,现在我有了这些文件:

valter@eniac:test$ ll
total 28
drwxr-xr-x 2 valter valter 4096 Jan 25 12:54 ./
drwxr-xr-x 3 root   root   4096 Jan 25 12:50 ../
-rw-rw-r-- 1 valter valter 1834 Jan 25 12:53 privkey.pem
-rw-rw-r-- 1 valter valter 4783 Jan 25 12:54 server.crt
-rw------- 1 valter valter 1675 Jan 25 12:53 server.key
-rw-rw-r-- 1 valter valter 3672 Jan 25 12:53 server.req
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么处理他们。root.crtroot.crt文件在哪里?我怎样才能生成它们?我把这些生成的文件放在哪里?我应该在客户端做什么?

jja*_*nes 6

您是否只想使用客户端用来验证服务器的服务器上的证书?(这是正常的操作模式)。然后服务器使用密码质询对客户端进行身份验证,就像没有使用 ssl 一样。

或者您想使用客户端证书来验证客户端到服务器以及服务器到客户端的身份?这种情况很少见,因为它需要证书颁发机构向所有用户颁发证书,并要求用户正确管理它们。

假设第一个,您不需要服务器上的 root.crt 文件。您现在需要做的就是编辑 postgresql.conf 以打开ssl=on,并编辑 pg_hba.conf 以要求或允许您的客户使用 ssl(hostssl要求或host允许。)

请注意,使用默认客户端配置(至少如果客户端是psql),使用 ssl 真正获得的只是加密,而不是真正的服务器身份验证。那是因为客户端只接受服务器发送的任何证书,并使用该证书来设置加密通道。因此,坏人可以使用自签名证书运行 PostgreSQL 服务器,并且如果它可以欺骗您的客户连接到它而不是您真正的 PostgreSQL 服务器,他们将很乐意连接到它并向其发送查询。