#python #mysql #ssl #pymysql
Вопрос:
Для проекта мне нужно внести изменения в существующий код для поддержки подключения MySQL с использованием SSL-сертификатов. Реализованный пакет является mysql.connector
и в значительной степени интегрирован в другие части исходного кода, поэтому его замена pymysql
не является вариантом.
Используя следующую конфигурацию:
config = { 'user': 'ssl-username', 'password': 'password', 'host': '4.1.3.2', 'ssl_ca': '/path/to/ca.pem', 'ssl_cert': '/path/to/cert.pem', 'ssl_key': '/path/to/key.pem' }
Следующие попытки завершаются неудачей:
mysql.connector.connect(**config, client_flags=[ClientFlag.SSL])
mysql.connector.connect(**config, client_flags=[ClientFlag.SSL], use_pure=True)
Следующие работы:
pymysql.connect(**config)
Трассировка неудачных попыток предоставляет следующую информацию:
Traceback (most recent call last): File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/network.py", line 421, in switch_to_ssl self.sock.do_handshake() File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL] internal error (_ssl.c:1123) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "lt;stdingt;", line 1, in lt;modulegt; File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/__init__.py", line 179, in connect return MySQLConnection(*args, **kwargs) File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 95, in __init__ self.connect(**kwargs) File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/abstracts.py", line 716, in connect self._open_connection() File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 208, in _open_connection self._do_auth(self._user, self._password, File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 134, in _do_auth self._socket.switch_to_ssl(**ssl_options) File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/network.py", line 426, in switch_to_ssl raise errors.InterfaceError( mysql.connector.errors.InterfaceError: 2055: Lost connection to MySQL server at '34.91.73.12:3306', system error: 1 [SSL] internal error (_ssl.c:1123) gt;gt;gt; del conn_args["client_flags"] gt;gt;gt; mysql.connector.connect(**conn_args) Traceback (most recent call last): File "/home/user/.local/lib/python3.8/site-packages/mysql/connector/network.py", line 421, in switch_to_ssl self.sock.do_handshake() File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL] internal error (_ssl.c:1123)
Что может быть не так, так как сообщение об ошибке не очень описательно.