web-dev-qa-db-fra.com

Erreur de connexion SSL lors de l'utilisation de MySQL Connector avec Python

J'utilise Python 3.6 (mais j'obtiens la même erreur avec Python 2.7) et mysql-connector-python dans un environnement Anaconda pour coder un script simple) pour accéder à ma base de données hébergée dans Hostgator. C'est l'erreur:

Traceback (most recent call last):
  File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 176, in _open_connection
    self._cmysql.connect(**cnx_kwargs)
_mysql_connector.MySQLInterfaceError: SSL connection error: SSL_CTX_set_tmp_dh failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "teste.py", line 6, in <module>
    passwd="senha"
  File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/__init__.py", line 172, in connect
    return CMySQLConnection(*args, **kwargs)
  File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 78, in __init__
    self.connect(**kwargs)
  File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/abstracts.py", line 731, in connect
    self._open_connection()
  File "/home/usuario/anaconda3/envs/fakebook/lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 179, in _open_connection
    sqlstate=exc.sqlstate)
mysql.connector.errors.InterfaceError: 2026 (HY000): SSL connection error: SSL_CTX_set_tmp_dh failed

Mon code est très simple, il suffit d'essayer de se connecter à la base de données:

import mysql.connector

mydb = mysql.connector.connect(
    Host="192.xxx.xxx.xx",
    user="root",
    passwd="senha"
)

print(mydb)

J'ai utilisé cette bibliothèque plusieurs fois sur d'autres ordinateurs, je me suis également connecté à cette même base de données via mon ordinateur, en utilisant la même bibliothèque et cela a toujours fonctionné avec ce code. J'ai essayé avec MySQL Workbench et il semble qu'il se connecte à la base de données en utilisant les mêmes informations d'identification que celles de mon code. J'ai déjà essayé de demander de l'aide au support du serveur, mon IP est autorisée à accéder à la base de données et même si je ne peux pas me connecter avec Python. J'ai essayé de réinstaller la bibliothèque, mais rien n'a changé.

Merci tout le monde!

8
Julio

Cela a fonctionné pour moi (Ubuntu 16.04 LTS). Depuis le terminal:

  1. recréer les certificats (datadir est de votre choix):

mysql_ssl_rsa_setup --datadir=/data/dir/

  1. Ajoutez ce qui suit à /etc/mysql/mysql.conf.d/mysqld.cnf:
ssl-ca=/data/dir/cacert.pem

ssl-cert=/data/dir/server-cert.pem

ssl-key=/data/dir/server-key.pem
  1. Redémarrez le serveur mysql: Sudo service mysql restart
3
mlcr

Cela ne semble se produire que lorsque le mysql-connector-python la bibliothèque utilise les extensions C au lieu de la pure implémentation python.

Depuis la version 8.0.11 , la valeur par défaut a changé et elle utilise désormais les extensions C si elles sont présentes.
https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

use_pure argument description

Une solution consiste à forcer le connecteur à utiliser l'implémentation python via cet indicateur, en l'ajoutant simplement à l'URL de connexion dans votre configuration:

url = 'mysql+mysqlconnector://user:password@mysql_server/database?use_pure=True'
9
juan

J'ai rencontré le même problème et l'ai résolu en ajoutant use_pure=True argument basé sur une suggestion ici :

import mysql.connector as sql

db_connection = sql.connect(Host='****', database='****', user='****', password='****', use_pure=True)

Packages pertinents sur mon mac: mysql-connector-python 8.0.16 et openssl 1.1.1b installé (les deux anaconda).

8
HaMi

J'ai rencontré le même problème sur mon Mac, j'utilisais la version 8.0.16 de mysql-connector-python, j'ai résolu le problème en rétrogradant vers la version 8.0.5

3
Aldo Okware

J'ai eu exactement le même problème, mais comme je ne pouvais pas utiliser la solution de mlcr (c'était une base de données AWS RDS), ma solution était différente. J'ai dû changer les versions de mysql-connector-python de 8.x.x à 2.2.3. Cela a résolu mon problème entièrement. J'espère que cela aide quelqu'un.

0
dnishiyama