设置并验证Python MySQL连接中使用的SSL / TLS版本

哈尔沃尔·霍尔斯滕·斯特兰德
  • 如何告诉Python MySQL连接器使用哪个SSL / TLS协议?特定的(例如TLS1.2)或最低的。

  • 如何检查已建立的连接上使用的协议?

我有一个使用mysql-connector-python(8.0.18)的应用程序我连接这样的东西:

cnx = mysql.connector.connect(user='x', password='y', host='localhost', database='xyz')

通常,这不会给我带来麻烦,但是最近在Web托管提供商服务器上,它停止了工作。我现在遇到的错误是:

mysql.connector.errors.InterfaceError: 2026 (HY000): SSL connection error: error:1408F10B:SSL routines:ssl3_get_record:wrong version number

并且(通过Flask-SQLAlchemy设置进行连接):

_mysql_connector.MySQLInterfaceError: SSL connection error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

我可以确认的是,如果我改为这样做ssl_disabled=True,则它可以正确连接(但我假设没有SSL / TLS):

cnx = mysql.connector.connect(user='x', password='y', host='localhost', database='xyz', ssl_disabled=True)

我无法更改提供程序服务器,但是他们说如果我指定要使用的特定版本(例如TLS1.2),则它应该正确连接。他们还提到使用ssl.OP_NO_SSLv3标志,但是这是SSLContext设置的一部分,我不确定如何将其应用于我的连接。

我看到在他们的MySQL实例(我无法编辑)上,它们没有设置以下值:

  • SHOW VARIABLES LIKE 'tls_version'
  • SHOW STATUS LIKE 'Ssl_cipher'
  • SHOW STATUS LIKE 'Ssl_version'
哈尔沃尔·霍尔斯滕·斯特兰德

根据我最近的理解和Andreas的帮助,我最终获得了以下连接:

cnx = mysql.connector.connect(user='u', password='p', host='localhost', database='db', ssl_ca='', ssl_version=ssl.PROTOCOL_TLSv1_2)

从源头上看,显然所有kwargs提供的内容也mysql.connector.constants.DEFAULT_CONFIGURATION被接受。其中包括文档中未包含的一些内容,例如ssl_versionssl_cipherkwargs到连接的映射似乎发生在中MySQLConnectionAbstract.connect请注意,设置ssl_version可能还需要其他一些变形。我需要提供ssl_ca它(可能会随您的MySQL实例包含的内容而有所不同SHOW VARIABLES LIKE '%ssl%')。

考虑到这一点,我获得了以下MVCE代码:

import mysql.connector
import ssl

cnx = mysql.connector.connect(user='u', password='p', host='localhost', database='db', ssl_ca='', ssl_version=ssl.PROTOCOL_TLSv1_2)
cursor = cnx.cursor()
cursor.execute("SELECT 1")

for (number,) in cursor:
    print('Number:', number)
print('SSL active:', cnx._ssl_active)
print('Connection SSL version:', cnx._ssl.get("version"))
print("Socket SSL version:", cnx._socket.sock.ssl_version)

cursor.close()
cnx.close()

对我来说输出:

Number: 1
SSL active: True
Connection SSL version: _SSLMethod.PROTOCOL_TLSv1_2
Socket SSL version: _SSLMethod.PROTOCOL_TLSv1_2

如果我不指定而进行相同的连接,则会ssl_version得到:

Number: 1
SSL active: True
Connection SSL version: None
Socket SSL version: _SSLMethod.PROTOCOL_TLS

如果ssl.PROTOCOL_TLSv1_2ssl.PROTOCOL_SSLv23替换则至少应尝试使用其他协议,但如果出现问题(例如,不受支持),则可能会失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java SSL/TLS 版本设置

来自分类Dev

使用Az PowerShell获取Azure Webapp的``最低TLS版本''设置

来自分类Dev

如何设置ActionMailer使用TLS连接所需的SSL协议?

来自分类Dev

使用 SSL/TLS 设置 Geary

来自分类Dev

列出特定OpenSSL版本支持的SSL / TLS版本

来自分类Dev

使用curl时指定次要TLS版本

来自分类Dev

如何使用 SSL 设置 mySql JDBC 连接

来自分类Dev

Azure 分析服务 Rest API 中使用哪个版本的 TLS

来自分类Dev

使用.start_tls_s()时如何强制Python LDAP验证/验证SSL证书

来自分类Dev

设置MySQL SSL连接

来自分类Dev

如何在apache HttpClient上设置TLS版本

来自分类Dev

如何在Jetty中读取HTTPS连接的TLS版本?

来自分类Dev

如何使用python在ssl/tls套接字连接中获取域的IP

来自分类Dev

Python ssl 无法使用 TLS1.2 客户端连接到 TLS1.2 服务器

来自分类Dev

如何测试我的.NET客户端使用的TLS版本?

来自分类Dev

如何检查我的 AFNetworking 库使用的是哪个版本的 TLS?

来自分类Dev

使用 openssl 以编程方式查找已协商的 TLS 版本

来自分类Dev

使用TLS和Python进行身份验证

来自分类Dev

强制Java RMI服务器/客户端使用SSL / TLS版本

来自分类Dev

如何检测我的服务是使用 SSL 还是 TLS 以及哪个版本

来自分类Dev

使用.sh文件设置python shell版本

来自分类Dev

使用Net :: HTTP设置SSL版本

来自分类Dev

无法通过python 3的pymqi版本使用SSL连接到公共队列

来自分类Dev

如何使用python建立TLS连接?

来自分类Dev

验证curl是否使用TLS

来自分类Dev

使用Python使用Selenium设置chromedriver代理身份验证

来自分类Dev

是否有任何信息图表说明每个OS X支持哪些SSL / TLS版本?

来自分类Dev

哪些版本的Windows TLS / SSL文件传输软件(例如WinSCP和FileZilla)不受Heartbleed的影响?

来自分类Dev

将最低TLS版本更改为1.2后无法连接到Azure Redis

Related 相关文章

  1. 1

    Java SSL/TLS 版本设置

  2. 2

    使用Az PowerShell获取Azure Webapp的``最低TLS版本''设置

  3. 3

    如何设置ActionMailer使用TLS连接所需的SSL协议?

  4. 4

    使用 SSL/TLS 设置 Geary

  5. 5

    列出特定OpenSSL版本支持的SSL / TLS版本

  6. 6

    使用curl时指定次要TLS版本

  7. 7

    如何使用 SSL 设置 mySql JDBC 连接

  8. 8

    Azure 分析服务 Rest API 中使用哪个版本的 TLS

  9. 9

    使用.start_tls_s()时如何强制Python LDAP验证/验证SSL证书

  10. 10

    设置MySQL SSL连接

  11. 11

    如何在apache HttpClient上设置TLS版本

  12. 12

    如何在Jetty中读取HTTPS连接的TLS版本?

  13. 13

    如何使用python在ssl/tls套接字连接中获取域的IP

  14. 14

    Python ssl 无法使用 TLS1.2 客户端连接到 TLS1.2 服务器

  15. 15

    如何测试我的.NET客户端使用的TLS版本?

  16. 16

    如何检查我的 AFNetworking 库使用的是哪个版本的 TLS?

  17. 17

    使用 openssl 以编程方式查找已协商的 TLS 版本

  18. 18

    使用TLS和Python进行身份验证

  19. 19

    强制Java RMI服务器/客户端使用SSL / TLS版本

  20. 20

    如何检测我的服务是使用 SSL 还是 TLS 以及哪个版本

  21. 21

    使用.sh文件设置python shell版本

  22. 22

    使用Net :: HTTP设置SSL版本

  23. 23

    无法通过python 3的pymqi版本使用SSL连接到公共队列

  24. 24

    如何使用python建立TLS连接?

  25. 25

    验证curl是否使用TLS

  26. 26

    使用Python使用Selenium设置chromedriver代理身份验证

  27. 27

    是否有任何信息图表说明每个OS X支持哪些SSL / TLS版本?

  28. 28

    哪些版本的Windows TLS / SSL文件传输软件(例如WinSCP和FileZilla)不受Heartbleed的影响?

  29. 29

    将最低TLS版本更改为1.2后无法连接到Azure Redis

热门标签

归档