gpt4 book ai didi

postgresql - 将 pgAdmin3 连接到 Heroku postgreSQL DB 时出现 SSL 错误

转载 作者:行者123 更新时间:2023-11-29 12:12:00 24 4
gpt4 key购买 nike

尝试使用 pgAdmin3 连接到 Heroku PostgresSQL DB 时出现以下错误:

Error connecting to the server: SSL error: certificate verify failed

连接基于 pg:credentials 输出并定义如下:

[属性]:

  • 主持人:<主持人>
  • 端口:5432
  • 服务:[空白]
  • 维护数据库:<数据库>
  • 用户名:<用户>

[SSL]:

  • SSL:需要
  • 服务器根证书文件:[空白]
  • 服务器证书吊销列表:[空白]
  • 客户端证书文件:[空白]
  • 客户端 key 文件:[空白]
  • SSL 压缩:开启

[SSH 隧道] 和 [高级] 保持默认

因此根据 Heroku 指南启用 SSL(设置为:[**require**])。

关于如何提供/修复错误消息引用的证书的任何想法?

最佳答案

很可能 pgAdmin 正在获取已在您的系统上配置的 CA 证书 bundle ,在这种情况下,require 将尝试根据该 bundle 验证服务器证书。

通常,这将是位于 %APPDATA%\postgresql\ 中的 root.crt 文件(C:\Users\YourUserName\AppData\Roaming\postgresql\) 在 Windows 下,或在 ~/.postgresql/ 在 Linux 下。

如果有这样的文件,请尝试将其暂时移开,以检查它是否可以更好地工作。


将它移开的问题是你不再根据任何东西验证任何远程 PostgreSQL 证书,但它仍然有效(使用 require,它会因 verify- 而失败完整)。

您可以通过将 root.crt 文件放在正确的位置并将服务器证书添加到受信任的证书列表中来解决此问题。


找到远程 PostgreSQL 证书可能有点棘手,但这个简单的 Python 应用程序应该可以让您做到这一点(根据需要替换 hostnameport):

import socket
import ssl
import struct


hostname = '...'
port = 5432

sock = socket.socket()
sock.connect((hostname, port))
# We first connect without encryption and tell the server
# we want to upgrade to SSL/TLS.
initiate_ssl_command = struct.Struct('!ii').pack(8, 80877103)
sock.sendall(initiate_ssl_command)
resp = sock.recv(1)
print "Response should be S: %s" % (resp,)

# We then initiate an SSL/TLS connection on this socket.
ssl_sock = ssl.wrap_socket(sock, cert_reqs=ssl.CERT_NONE)
ssl_sock.do_handshake()
peer_cert = ssl_sock.getpeercert(True)
print ssl.DER_cert_to_PEM_cert(peer_cert)
ssl_sock.close()

(有关此代码的详细信息,请参阅 PostgreSQL 协议(protocol)文档,特别是 "SSL Session Encryption" sectionSSLRequest message ,这与 STARTTLS 在其他协议(protocol)(如 SMTP)中所做的类似.)

安全警告:在这里,您只是希望这个特定连接没有受到攻击,并在第一时间返回真实证书。您将使用它作为后续连接的信任 anchor 。 (这与接受第一次连接的 SSH 服务器 key 非常相似,如果它发生变化,它将标记对证书的更改。)

还值得注意的是,证书主题 DN 可能与您要连接的服务器的主题 DN 不匹配,因此您可能无法使用 PostgreSQL 的 verify-full 模式(这是唯一的真正安全的模式,因为它还会验证主机名和信任 anchor )。

理想情况下,Heroku(或任何提供此服务的人)应该通过另一种安全方式为您提供该证书,并确保该证书中的主题 DN 与他们提供给您的主机名相匹配。 (我不确定目前是否是这种情况,也许可以从管理界面获得。)

关于postgresql - 将 pgAdmin3 连接到 Heroku postgreSQL DB 时出现 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com