bra*_*k44 2 python ssl pymysql
设置一个新服务器,我想使用 TLS 连接与中央 MySQL 数据库进行通信以确保安全
按照这样的步骤,我已经能够为我的 MySQL 服务器设置 TLS,我已经创建了几个能够从任何主机 (%) 登录的用户,并且需要 SSL 连接
+------------+-----------+----------+
| user | host | ssl_type |
+------------+-----------+----------+
| testuser | % | ANY |
+------------+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
我可以通过使用 HeidiSQL 或 MySQL CLI 工具等工具进行连接来在任何主机上确认这一点 例如:mysql -u testuser -p -h mysql_server_IP这将启动 TLS 连接,如 \s 所确认的这排除了我在本论坛和其他论坛上看到的大多数问题,即由主机设置为 localhost 引起的。
访问本地数据库时,以下工作正常。当连接到非 TLS 远程数据库服务器时,它也可以正常工作。
import pymysql.cursors
connection = pymysql.connect(host=host,
user=user,
password=password,
db=db,
cursorclass=pymysql.cursors.DictCursor)
Run Code Online (Sandbox Code Playgroud)
当尝试使用 require-tls 访问我的服务器时,我收到以下错误
pymysql.err.OperationalError: (1045, "Access denied for user 'testuser'@'desktop.example.com' (using password: YES)")
我的其他发现表明该错误是由以下原因引起的:无效的用户名/密码组合,或者该主机禁止连接。不过,我知道我可以从该主机建立连接,如 CLI 所示。
当连接到只有 my.cnf 的服务器时require_secure_transport = ON,PyMySQL 会给出一个更明显的错误,无法启动 TLS 连接。pymysql.err.InternalError: (3159, 'Connections using insecure transport are prohibited while --require_secure_transport=ON.'但如果 MySQL 用户本身需要 SSL,您会从上面的问题中得到更通用的权限被拒绝错误。
在github 问题跟踪器上提到了提供 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})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7960 次 |
| 最近记录: |