Python MySQL的CA SSL参数不起作用,但关键呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python MySQL的CA SSL参数不起作用,但关键呢?相关的知识,希望对你有一定的参考价值。

我正在尝试连接到需要SSL的MySQL数据库(仅进行服务器身份验证,而不是相互之间)。我将服务器的CA保存为我正在运行脚本的同一目录中的.pem。我的连接字符串如下所示:

ssl_settings = {'ca':'ca.pem'}
conn = MySQLdb.connect(host=HOST, user=USER, passwd=PASS, db=DB, ssl=ssl_settings}

这导致“错误2026:SSL连接错误”。但是,如果我将ssl_settings更改为:

ssl_settings = {'key':'ca.pem'}

数据库连接正常,脚本执行。根据我对SSL参数的理解,'cert'和'key'应仅用于服务器的客户端身份验证,因此后面的SSL设置似乎有效以及为什么指定CA文件没有原因?

Python 2.4.3(旧的,我知道) MySQL-python 1.2.1

答案

注意:此错误已被修复。根据错误:

在5.1.66,5.5.28,5.6.7,5.7.0更改日志中注明。

--ssl-key选项的参数未经验证存在且是有效密钥。生成的连接使用SSL,但未使用密钥。


老答案

有关比我能给出的更好的描述,请参阅http://bugs.mysql.com/bug.php?id=62743http://www.chriscalender.com/?p=325

从我(公认的未受过教育)的理解,这是一个MySQL错误。只要您只指定一个键(正如您在示例中所做的那样),MySQL就会设置SSL连接,并且您被授予了访问权限。另一个有趣的部分是,您可以将键值更改为任何内容,因此在您的示例中,您可以执行以下操作:

ssl_settings = {'key': 'randomstuff'}

它应该仍然连接。

另一答案

您可以将键值更改为任何内容

我也看到了与MySQLdb版本1.3.12相同的行为。要使用MySQLdb设置SSL连接,将ssl参数设置为任何仍然有效(我正在使用Python3):

$ python
Python 3.6.8 (default, Dec 26 2018, 09:19:39) 
>>> import MySQLdb
>>> MySQLdb.__version__
'1.3.12'
>>> db = MySQLdb.connect(host='10.105.136.101', user='my-user', passwd='myPassword', ssl={'ssl' : {'ca': '/junk/file'}})
>>> db
<_mysql.connection open to '10.105.136.101' at 561aaa994f98>

将上面的ssl设置为不存在的证书/junk/file仍然可以正常工作而没有任何错误。

以上是关于Python MySQL的CA SSL参数不起作用,但关键呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥mysql客户端不使用--ssl-ca操作可以通过私有IP连接到启用SSL的mysql5.6,但不能通过公共IP?

mysql 基于 ssl 的主从复制

CA证书和SSL证书的区别

插入带有参数MYSQL的存储过程不起作用

为啥要安装ssl证书,都有哪些作用?

Debezium MySQL 参数 table.exclude.list 不起作用