我有一个设置使用 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 的参数并且一切运行正常。