PostgreSQL 8.0 中的 SSL 连接错误
SSL connection error in PostgreSQL 8.0
我们有一个连接到 PostgreSQL 8.0、9.0 或 9.5(不同客户端的不同版本)的应用程序。最近我们决定添加 SSL 连接以提高安全性。在 9.0 和 9.5 上一切似乎都不错,但在 8.0 上就不行了。
这是我测试连接的方法(我将比较 8.0 和 9.0 的设置,因为它们非常相似)。我正在本地机器上测试连接,它是在本地完成的,只是为了测试所以不要告诉我为本地主机关闭 ssl,这不是我要找的答案。
我已经准备好了所有需要的证书。服务器端:
root.crt
server.crt
server.key
我已将这些文件放在 9.0 和 8.0 PostgreSQL 安装的 \data 文件夹中。
我有客户证书:
postgresql.crt
postgresql.key
它们在同一台机器上的 \appdata\Roaming\postgresql 文件夹中。
我在 8.0 和 9.0 中编辑了 postgresql.conf 并设置了这个选项:
ssl = on
(我也试过ssl = true)
在pg_hba.conf中我只有一个连接选项:
TYPE DATABASE USER CIDR-ADDRESS METHOD
9.0:
hostssl all all ::1/128 cert
8.0
hostssl all all 127.0.0.1/32 md5 clientcert=1
在 8.0 中我使用 "md5 clientcert=1" 因为没有 "cert" 选项(我也尝试了 "trust" 和 "md5")并且我也尝试了不同的地址 - :: 1/128,甚至 "all"。结果总是一样的——如果 hostssl 选项是唯一可用的,我就无法连接到 8.0 服务器。我收到此错误:
SSL error: tlsv1 alet decrypt error FATAL: no pg_hba.conf entry for host "127.0.0.1", user "SU", database "template1", SSL off
我连接到 9.0(和 9.5)没问题。我使用 PgAdmin III 尝试连接,因为如果我使用它连接,我也可以使用应用程序连接到服务器。
有谁知道为什么我无法通过 SSL 连接到 PostgresSQL 8.0?
使用 PostgreSQL 8.0 的人对安全性的关注程度不足以关注 SSL 连接,对吗?
例如,由于数据库受制于 CVE-2013-1899,任何可以通过网络访问服务器的人都可以覆盖数据库中的任意文件。
也就是说,我假设问题是 8.0 服务器使用旧版本的 OpenSSL,例如一个没有针对 CVE-2009-3555 的修复程序和包含修复程序的更高版本的 OpenSSL 拒绝握手。
您可以考虑在 8.0 服务器上升级 OpenSSL。
我终于成功地与 PostgreSQL 8.0 建立了 SSL 连接。使用 OpenSSL 制作证书文件 (*.crt) 时,应将此选项添加到命令提示符命令中:
-sha1
否则它将用作默认 SHA-256,但 PostgreSQL 8.0 中包含的旧 openssl 版本不支持此算法。
我们有一个连接到 PostgreSQL 8.0、9.0 或 9.5(不同客户端的不同版本)的应用程序。最近我们决定添加 SSL 连接以提高安全性。在 9.0 和 9.5 上一切似乎都不错,但在 8.0 上就不行了。
这是我测试连接的方法(我将比较 8.0 和 9.0 的设置,因为它们非常相似)。我正在本地机器上测试连接,它是在本地完成的,只是为了测试所以不要告诉我为本地主机关闭 ssl,这不是我要找的答案。
我已经准备好了所有需要的证书。服务器端:
root.crt
server.crt
server.key
我已将这些文件放在 9.0 和 8.0 PostgreSQL 安装的 \data 文件夹中。
我有客户证书:
postgresql.crt
postgresql.key
它们在同一台机器上的 \appdata\Roaming\postgresql 文件夹中。
我在 8.0 和 9.0 中编辑了 postgresql.conf 并设置了这个选项:
ssl = on
(我也试过ssl = true)
在pg_hba.conf中我只有一个连接选项:
TYPE DATABASE USER CIDR-ADDRESS METHOD
9.0:
hostssl all all ::1/128 cert
8.0
hostssl all all 127.0.0.1/32 md5 clientcert=1
在 8.0 中我使用 "md5 clientcert=1" 因为没有 "cert" 选项(我也尝试了 "trust" 和 "md5")并且我也尝试了不同的地址 - :: 1/128,甚至 "all"。结果总是一样的——如果 hostssl 选项是唯一可用的,我就无法连接到 8.0 服务器。我收到此错误:
SSL error: tlsv1 alet decrypt error FATAL: no pg_hba.conf entry for host "127.0.0.1", user "SU", database "template1", SSL off
我连接到 9.0(和 9.5)没问题。我使用 PgAdmin III 尝试连接,因为如果我使用它连接,我也可以使用应用程序连接到服务器。
有谁知道为什么我无法通过 SSL 连接到 PostgresSQL 8.0?
使用 PostgreSQL 8.0 的人对安全性的关注程度不足以关注 SSL 连接,对吗?
例如,由于数据库受制于 CVE-2013-1899,任何可以通过网络访问服务器的人都可以覆盖数据库中的任意文件。
也就是说,我假设问题是 8.0 服务器使用旧版本的 OpenSSL,例如一个没有针对 CVE-2009-3555 的修复程序和包含修复程序的更高版本的 OpenSSL 拒绝握手。
您可以考虑在 8.0 服务器上升级 OpenSSL。
我终于成功地与 PostgreSQL 8.0 建立了 SSL 连接。使用 OpenSSL 制作证书文件 (*.crt) 时,应将此选项添加到命令提示符命令中:
-sha1
否则它将用作默认 SHA-256,但 PostgreSQL 8.0 中包含的旧 openssl 版本不支持此算法。