pymysql 无法连接 SSL

Posted

技术标签:

【中文标题】pymysql 无法连接 SSL【英文标题】:pymysql cannot connect with SSL 【发布时间】:2016-02-29 00:05:17 【问题描述】:

我正在尝试使用 python 连接到 mysql 数据库,但我遇到了一个奇怪的错误。更复杂的是,我可以使用来自 mysql 控制台命令的相同连接值,并且连接没有问题。

这是我正在使用的确切代码:

导入pymysql 从检查导入 AgentCheck

class DelayedJobCheck(AgentCheck):
    def check(self, instance):
        self.log.info("testing connection")
        self.log.info(instance)

        connection = pymysql.connect(**instance)

        cur = cnx.cursor(buffered=True)
        cur.execute("SHOW STATUS LIKE 'Ssl_cipher'")
        print(cur.fetchone())
        cur.close()
        cnx.close()

        self.gauge('hello.world', 1)

这是我得到的错误:

回溯(最近一次通话最后): 运行中的文件“/opt/datadog-agent/agent/checks/__init__.py”,第 661 行 self.check(copy.deepcopy(实例)) 文件“/opt/datadog-agent/agent/checks.d/delayed_job.py”,第 10 行,检查中 连接 = pymysql.connect(**实例) 文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/__init__.py”,第 88 行,在 Connect 返回连接(*args,**kwargs) __init__ 中的文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py”,第 644 行 self._connect() 文件“/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py”,第 869 行,在 _connect 提高 exc OperationalError: (2003, u"Can't connect to MySQL server on '192.168.199.86' ([SSL: SSL_NEGATIVE_LENGTH] dh key too small (_ssl.c:590))")

我在 Ubuntu 机器上运行此代码,但我最初认为这可能是因为 SSL CA 是自生成的证书。所以我遵循了here 的步骤,但是,它没有任何区别。此外,我已验证运行此代码的进程具有对证书文件的完全访问权限

还有什么可能导致这种情况的想法吗?

【问题讨论】:

看起来这是 linux 中最新的 openssl 包的安全更新。通过运行以下命令将 OpenSSL 包降级到以前的版本:sudo apt-get install libssl-dev=1.0.1-4ubuntu3 libssl-doc=1.0.1-4ubuntu3 libssl1.0.0=1.0.1-4ubuntu3 openssl=1.0。 1-4ubuntu3 如果这对你不起作用,这里有一组更长的步骤可以尝试。 groups.google.com/d/msg/security-onion/E7HdGGUuq6c/gqNBbT5TLw0J 【参考方案1】:

由于错误信息说 dh 密钥太小,一个更大的可能会有所帮助。将默认的 dh512.pem 文件替换为 dh4096.pem

sudo wget "https://git.openssl.org/gitweb/?p=openssl.git;a=blob_plain;f=apps/dh4096.pem" -O dh4096.pem

参考:http://www.alexrhino.net/jekyll/update/2015/07/14/dh-params-test-fail.html

【讨论】:

以上是关于pymysql 无法连接 SSL的主要内容,如果未能解决你的问题,请参考以下文章

发生ssl错误 无法建立到该服务器的安全连接

发生ssl错误 无法建立到该服务器的安全连接

发生ssl错误 无法建立到该服务器的安全连接

代理无法通过 SSL 连接工作

无法使用 PostgreSQL JDBC 驱动程序通过 SSL 连接

tomcat无法建立ssl连接