【问题标题】:SSL Certification Error > hostname doesn't matchSSL 认证错误 > 主机名不匹配
【发布时间】:2017-07-24 13:55:54
【问题描述】:

我正在尝试使用 SSL 证书和 python 模块 PyMySQL 连接到 Google Cloud MYSQL 服务器,其中包含以下行:

connection = pymysql.connect(host=os.environ['SQL_HOST_IP'], user=os.environ['SQL_USER'], password = os.environ['SQL_PASSWORD'],
db='main', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor, 
ssl={'key': 'client-key.pem', 'cert': 'client-cert.pem', 'ca': 'server-ca.pem'})

很遗憾,我不断收到以下错误:

ssl.CertificateError: hostname 'SQL_IP_ADDRESS' doesn't match '$ALIAS_FROM_SELF_SIGNED_SSL_CERT'

我已查找该问题,但找不到不涉及对 ssl 代码进行猴子补丁以跳过 ssl 验证的修复程序。我明确列出了 SQL 主机的 IP 地址,但 ssl 验证在 ssl.match_hostname 期间暂停,因为 ssl 证书是使用不同的主机名自签名的。

我确定我的密钥是有效的,因为我可以使用 Ruby (Windows/Linux) 和 linux mysql CLI 与它们连接。这似乎是 ssl.match_hostname 的问题。它类似于this questionthis one,但都回避了这个问题。

有没有办法在 Python 中正确处理自签名 SSL 证书。

【问题讨论】:

  • 我也遇到了同样的问题,你解决了吗?
  • @proximate_cause 如果您能够解决此问题,建议您发布您的答案作为更好地帮助社区的解决方案。如果不是,则此问题通常是由于位于防火墙或代理后面引起的。建议调查任何本地网络配置并测试来自不受任何限制的不同网络的连接。

标签: python mysql ssl google-cloud-sql pymysql


【解决方案1】:

尽管您的答案问题的解决方案在此处作为合并请求被拒绝:https://github.com/PyMySQL/PyMySQL/pull/555

您可以选择禁用 check_hostname。这适用于版本'0.7.11'

ssl_options = {
    'key': 'client-key.pem',
    'cert': 'client-cert.pem',
    'ca': 'server-ca.pem',
    'check_hostname': False
}

connection = pymysql.connect(
    host=os.environ['SQL_HOST_IP'],
    user=os.environ['SQL_USER'],
    password = os.environ['SQL_PASSWORD'],
    db='main', 
    charset='utf8mb4', 
    cursorclass=pymysql.cursors.DictCursor, 
    ssl=ssl_options
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多