Параметр CA SSL для Python MySQLdb не работает, но ключ работает? - PullRequest
5 голосов
/ 02 сентября 2011

Я пытаюсь подключиться к БД MySQL, для которой требуется SSL (выполняется только аутентификация сервера, а не взаимная).Я сохранил 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

Ответы [ 2 ]

3 голосов
/ 10 августа 2012

Примечание: эта ошибка с тех пор была исправлена.За ошибку:

Отмечено в изменениях журнала 5.1.66, 5.5.28, 5.6.7, 5.7.0.

Аргумент к параметру --ssl-key не былподтверждено существование и быть действительным ключом.Полученное соединение использовало SSL, но ключ не использовался.


Старый ответ

Более подробное описание, чем я могу дать, см.http://bugs.mysql.com/bug.php?id=62743 и http://www.chriscalender.com/?p=325.

Насколько я понимаю (необразованно), это ошибка MySQL.Пока вы указываете только ключ (как вы делаете в примере, который работает), MySQL устанавливает соединение SSL, и вы получаете доступ.Другая интересная часть заключается в том, что вы можете изменить значение ключа на что угодно, поэтому в вашем примере вы можете сделать:

ssl_settings = {'key': 'randomstuff'}

, и он все равно должен подключиться.

0 голосов
/ 06 февраля 2019

вы можете изменить значение ключа на что угодно

Я вижу то же поведение с MySQLdb версия 1.3.12.Чтобы установить SSL-соединение с помощью MySQLdb, установка аргумента 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 по-прежнему работает без ошибок.

...