Windows 上的 Python/MySQL。OpenSSL 的问题

Windows 上的 Python/MySQL。OpenSSL 的问题

我有一个设置使用 SSL 的 MySQL 服务器,并且我还有 CA 证书。

当我使用 MySQL Workbench 连接到服务器时,我不需要证书。我也可以在苹果没有 CA 证书。

但是当我尝试使用完全相同的 Python 和 MySQLdb 设置进行连接时视窗机器,我被拒绝访问。看来我需要 CA。当我输入 CA 时,我收到以下错误

_mysql_exceptions.OperationalError: (2026, 'SSL connection error')

我打开连接的代码如下:

db = MySQLdb.connect(host="host.name",    
                 port=3306,
                 user="user",         
                 passwd="secret_password",  
                 db="database", 
                 ssl={'ca': '/path/to/ca/cert'})  

有人能指出 Windows 上的问题吗?我认为这与 OpenSSL 和 Python 有关。我从这里。但我不认为 Python 使用我安装的这个版本,因为当我使用 Python 打印版本时,它是不一样的。

这是 Python 打印的内容。它仍然不是一个非常旧的版本,在连接到 MySQL 时应该可以工作

OpenSSL 1.0.2j 26 Sep 2016

我真的不习惯使用 OpenSSL 及其问题。我几乎尝试了通过搜索我收到的错误在 Google 上找到的所有解决方案,你会认为其中一个应该有效。但没有一个有效,因此我猜测问题出在我系统上的 OpenSSL 和 Python 上。有人知道我应该如何尝试至少找出确切的问题吗?

我也不明白如何使用 Mac/Python 或 MySQL Workbench 连接到没有 CA 证书的 MySQL 服务器,但是在 Windows 中使用 Python 时出现访问被拒绝错误 :/

更新:

Python 版本 2.7.13

MySQL Server Enterprise 版本 5.7.18

答案1

我相信您不仅需要设置 ssl“ca”,还需要设置“cert”和“key”:

db = MySQLdb.connect(host="host.name",    
                 port=3306,
                 user="user",         
                 passwd="secret_password",  
                 db="database", 
                 ssl={'ca': '/path/to/ca/cert',
                      'key': '/path/to/key',
                      'cert': '/path/to/cert'}) 

答案2

我使用官方的 MySQL 连接器到 Python 解决了这个问题,按照此链接中的说明进行操作:https://dev.mysql.com/doc/connector-python/en/

它有一个ssl_ca接受 CA 的参数并且一切运行正常。

相关内容