Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用PyMySQL与远程MySQL服务器建立TLS TCP连接,其他工具正常工作_Python_Ssl_Pymysql - Fatal编程技术网

Python 无法使用PyMySQL与远程MySQL服务器建立TLS TCP连接,其他工具正常工作

Python 无法使用PyMySQL与远程MySQL服务器建立TLS TCP连接,其他工具正常工作,python,ssl,pymysql,Python,Ssl,Pymysql,设置一个新服务器,我希望使用TLS连接与中央MySQL数据库进行通信,以确保安全 按照我已经能够为MySQL服务器设置TLS的步骤,我已经创建了几个能够从任何主机(%)登录并需要SSL连接的用户 +------------+-----------+----------+ | user | host | ssl_type | +------------+-----------+----------+ | testuser | % | ANY |

设置一个新服务器,我希望使用TLS连接与中央MySQL数据库进行通信,以确保安全

按照我已经能够为MySQL服务器设置TLS的步骤,我已经创建了几个能够从任何主机(%)登录并需要SSL连接的用户

+------------+-----------+----------+
| user       | host      | ssl_type |
+------------+-----------+----------+
| testuser   | %         | ANY      |
+------------+-----------+----------+
我可以在任何主机上通过使用HeidiSQL或MySQL CLI工具等工具进行连接来确认这一点 例如:
mysql-u testuser-p-h mysql\u server\u IP
这将启动TLS连接,由\s确认 这排除了我在本论坛和其他论坛上看到的大多数问题,这是由主机设置为localhost引起的

在访问本地数据库时,以下操作可以正常工作。当连接到非TLS远程数据库服务器时,它也可以正常工作

import pymysql.cursors

connection = pymysql.connect(host=host,
                             user=user,
                             password=password,
                             db=db,
                             cursorclass=pymysql.cursors.DictCursor)
尝试使用require tls访问我的服务器时,我收到以下错误
pymysql.err.OperationalError:(1045,“用户'testuser'@'desktop.example.com'的访问被拒绝”(使用密码:YES)

我的其他调查结果表明,该错误是由以下原因造成的:
无效的用户名/密码组合,或该主机禁止的连接。但是,我知道我可以从这个主机建立连接,正如CLI所示。

当连接到一个在my.cnf中只有
require\u secure\u transport=ON
的服务器时,PyMySQL在无法启动TLS连接方面会出现一个更明显的错误
pymysql.err.InternalError:(3159,'在--require_secure_transport=ON时禁止使用不安全传输的连接。
但是如果MySQL用户本身需要SSL,则会从上述问题中得到更一般的权限拒绝错误

上提到了提供CA.pem文件。如果您没有访问这些文件的权限,并且希望隐式信任自签名证书。上提到了
-ssl
标志,该标志允许您传入各种证书文件的路径

但是,通过在没有任何有效密钥的情况下传递有效字典,可以有效地覆盖信任自签名证书。例如:

connection = pymysql.connect(host=host,
                             user=user,
                             password=password,
                             db=db,
                             cursorclass=pymysql.cursors.DictCursor,
                             ssl={"fake_flag_to_enable_tls":True})