Назад | Перейти на главную страницу

Python / MySQL в Windows. Проблемы с openssl

У меня есть сервер MySQL, настроенный для использования SSL, и у меня также есть сертификат CA.

Когда я подключаюсь к серверу с помощью MySQL Workbench, мне не нужен сертификат. Я также могу подключиться к серверу с помощью Python и MySQLdb на Mac без CA-сертификата.

Но когда я пытаюсь подключиться, используя ту же настройку Python и MySQLdb на окна машина, мне отказано в доступе. Похоже, мне нужен 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'})  

Может ли кто-нибудь указать, в чем проблема с окнами? Я считаю, что это связано с OpenSSL и Python. Я установил OpenSSL из Вот. Но я не думаю, что Python использует эту версию, которую я установил, поскольку, когда я печатаю версию с помощью Python, это не то же самое.

Это то, что печатает Python. Это еще не очень старая версия, и она должна была работать при подключении к MySQL.

OpenSSL 1.0.2j 26 Sep 2016

Я действительно не привык работать с OpenSSL и его проблемами. Я буквально перепробовал все решения, найденные в Google, выполнив поиск полученной ошибки, и вы могли подумать, что одно из них должно работать. Но никто этого не сделал, и, следовательно, я предполагаю, что проблема в OpenSSL и Python в моей системе. Кто-нибудь знает, как я должен попытаться хотя бы определить точную проблему?

Я также не понимаю, как я могу подключиться к серверу MySQL без сертификата CA с помощью Mac / Python или MySQL Workbench, но я получаю ошибку отказа в доступе в Windows с помощью Python: /

ОБНОВИТЬ:

Python версии 2.7.13

MySQL Server Enterprise версии 5.7.18

Я решил эту проблему, используя официальный соединитель MySQL для Python, следуя инструкциям по этой ссылке: https://dev.mysql.com/doc/connector-python/en/

У него есть аргумент ssl_ca который принимает CA, и все работает нормально.

Я считаю, что вам нужно установить не только 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'})