pymysql无法与SSL连接

Jos*_*ore 6 python mysql ssl

我试图使用python连接到MySQL数据库,但我收到一个奇怪的错误.事实上,我可以使用来自mysqlconsole命令的相同连接值,并且连接没有任何问题.

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

从check导入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)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Traceback (most recent call last):
  File "/opt/datadog-agent/agent/checks/__init__.py", line 661, in run
    self.check(copy.deepcopy(instance))
  File "/opt/datadog-agent/agent/checks.d/delayed_job.py", line 10, in check
    connection = pymysql.connect(**instance)
  File "/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/__init__.py", line 88, in Connect
    return Connection(*args, **kwargs)
  File "/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py", line 644, in __init__
    self._connect()
  File "/opt/datadog-agent/embedded/lib/python2.7/site-packages/pymysql/connections.py", line 869, in _connect
    raise 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是自生成的证书.所以我按照这里的步骤但是,它没有任何区别.此外,我已经验证运行此代码的进程具有对cert文件的完全访问权限

还有什么想法可能导致这个问题吗?

fat*_*ihn 0

由于错误信息显示 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