- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用 pgAdmin3 连接到 Heroku PostgresSQL DB 时出现以下错误:
Error connecting to the server: SSL error: certificate verify failed
连接基于 pg:credentials
输出并定义如下:
[属性]:
[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 应用程序应该可以让您做到这一点(根据需要替换 hostname
和 port
):
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" section 和 SSLRequest
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/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!