如何为 SSL 配置 PyMySQL 连接?

How do I configure PyMySQL connect for SSL?

我正在尝试使用 SSL 和 Py 连接我的数据库MySQL,但我找不到关于语法是什么的好文档。

这些凭据在 Workbench 和 CLI 中有效,但在使用 PyMySQL 时出现此错误。

无法连接到 'server.domain.com' 上的 MySQL 服务器([WinError 10061] 无法建立连接,因为目标计算机主动拒绝它)")

db_conn = pymysql.connect(
    host=db_creds['host'],
    user=db_creds['user'],
    passwd=db_creds['passwd'],
    db=db_creds['db'],
    charset=db_creds['charset'],
    ssl={'ssl':{'ca': 'C:/SSL_CERTS/ca-cert.pem',
                'key' : 'C:/SSL_CERTS/client-key.pem',
                'cert' : 'C:/SSL_CERTS/client-cert.pem'
                }
        }
)

如果我关闭 SSL 并删除 SSL 参数,我可以不安全地连接。我对 SSL 参数做错了什么?

编辑:PyMySQL 现在希望 ssl 参数像这样列出而不是在字典中。

db_conn = pymysql.connect(
     host=db_creds['host'],
     user=db_creds['user'],
     passwd=db_creds['passwd'],
     db=db_creds['db'],
     charset=db_creds['charset'],
     ssl_ca='C:/SSL_CERTS/ca-cert.pem',
     ssl_key='C:/SSL_CERTS/client-key.pem',
     ssl_cert='C:/SSL_CERTS/client-cert.pem'
                          )

感谢大家的帮助。问题中列出的语法是正确的,但我尝试连接的服务器使用的是非标准端口。我需要添加

端口=db_creds['port']

谢谢 MannyKary 提供的线索。

我在为需要 X509 的用户使用客户端证书和密钥连接 pyMysql 时遇到了同样的问题,TiDB(mySQL 5.7 兼容)服务器抱怨没有提供证书!!!

[2021/05/18 16:31:23.881 +00:00] [INFO] [privileges.go:258] ["ssl check failure, require x509 but no verified cert"] [user=mindline_root] [host=%]

查看 PyMysql 1.0.2 的源代码,似乎 ssl 参数现在是布尔值而不是 ssl_dict,因此您应该将所有 ssl 参数放入单独的参数中,例如,

db_conn = pymysql.connect(
    host=db_creds['host'],
    user=db_creds['user'],
    passwd=db_creds['passwd'],
    db=db_creds['db'],
    charset=db_creds['charset'],
    ssl_ca='C:/SSL_CERTS/ca-cert.pem',
    ssl_key='C:/SSL_CERTS/client-key.pem',
    ssl_cert='C:/SSL_CERTS/client-cert.pem'
)