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的主要内容,如果未能解决你的问题,请参考以下文章