【发布时间】:2019-04-26 06:42:13
【问题描述】:
我是 SSL 新手,所以我从阅读大量教程、主题、论坛开始... 资料很多,有点复杂。 我正在尝试在我的计算机和不同服务器上的 Postgresql 实例之间建立 SSL 连接。为此,我一步一步地工作。
-
检查两者之间的连接是否在没有 SSL 的情况下工作
- 通过命令行连接自己:OK!
psql "hostaddr=X.X.X.X port=5432 user=postgres dbname=my_db"
- 通过数据库可视化工具(TeamSql,类似于 PgAdmin 或 MysqlWorkbench)连接自己:好的!
生成密钥和证书; 我已经在线学习了一个教程(“[]”中的所有内容都是我隐藏的参数)
创建服务器密钥
openssl genrsa -des3 -out server.key 1024
chmod 400 server.key
chown postgres.postgres server.key
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=FR/ST=[MyCountry]/L=[MyCity]/O=[MyCompany]/CN=postgres/emailAddress=[my@email.com]'
假设根证书相同
cp server.crt root.crt
之后,生成客户端。一、钥匙
openssl genrsa -des3 -out /tmp/postgresql.key 1024
然后是企业社会责任
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=FR/ST=[MyCountry]/L=[MyCity]/O=[MyCompany]/CN=postgres'
最后是 CRT
openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserial
- 在服务器端激活 SSL。 在 PG_HBA.CONF 文件中,添加一个特定的行来处理来自外部的 SSL 连接
在 POSTGRESQL.CONF 文件中,修改这些行:
listen_addresses = '*'
[...]
ssl = on
[...]
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'root.crt'
检索我计算机上 /home/user/.postgresql/ 文件夹中的 postgresql.key、postgresql.crt 和 root.crt 文件。 还更改了对 postgresql.key 文件的权限 (600)
-
再次尝试第一步。在命令行的情况下,一切正常。但是使用可视化工具,即使激活了 SSL 选项(并使用相同的三个文件),也会有两个结果:
将“拒绝未经授权”选项设置为关闭:它正在工作
将“拒绝未经授权”选项设置为 ON:出现错误
主机名/IP 与证书的替代名称不匹配:“IP:X.X.X.X 不是 在证书列表中:“
(用 X.X.X.X 我的服务器 IP)
所以我的问题是:我做的一切都好吗?为什么命令行连接和可视化工具有区别? 证书生成可以吗?
当然,我不想要真正的 CA 认证。我正在寻找一个自签名的,但即使我遵循了不同的教程,它仍然无法正常工作...... 感谢您的帮助,祝您周末愉快
【问题讨论】:
标签: postgresql ssl teamsql