У меня есть сервер 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'})