You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pymysql连接Amazon RDS报错:check_hostname启用时无法设置verify_mode为CERT_NONE

解决pymysql连接Amazon RDS时的SSL参数冲突错误

错误原因

报错Cannot set verify_mode to CERT_NONE when check_hostname is enabled源于SSL参数配置冲突:当check_hostname(主机名验证)开启时,verify_mode(证书验证模式)不能设为CERT_NONE(不验证证书)。你的代码中设置了ssl_verify_identity=True,会自动开启check_hostname,但pymysql的默认参数组合可能导致verify_mode被设为CERT_NONE,引发矛盾。

解决方案

方案1:显式配置SSL上下文(推荐)

手动创建SSL上下文,确保证书验证模式与主机名验证一致,同时修正PORT参数类型(需为整数):

import pymysql
import sys
import boto3
import os
import ssl

ENDPOINT="mysqldb.123456789012.us-east-1.rds.amazonaws.com"
PORT=3306  # 改为整数类型
USER="jane_doe"
REGION="us-east-1"
DBNAME="mydb"
os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1'

session = boto3.Session(profile_name='default')
client = session.client('rds')

token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=str(PORT), DBUsername=USER, Region=REGION)

try:
    # 创建符合要求的SSL上下文
    ssl_context = ssl.create_default_context(cafile='certbundle.pem')
    ssl_context.check_hostname = True
    ssl_context.verify_mode = ssl.CERT_REQUIRED
    
    conn = pymysql.connect(
        auth_plugin_map={'mysql_clear_password': None},
        host=ENDPOINT,
        user=USER,
        password=token,
        port=PORT,
        database=DBNAME,
        ssl=ssl_context
    )
    cur = conn.cursor()
    cur.execute("""SELECT now()""")
    query_results = cur.fetchall()
    print(query_results)
except Exception as e:
    print("Database connection failed due to {}".format(e))          

方案2:调整SSL参数组合(仅测试环境推荐)

若允许关闭主机名验证,可修改参数消除冲突:

# ... 其他代码不变 ...
try:
    conn = pymysql.connect(
        auth_plugin_map={'mysql_clear_password': None},
        host=ENDPOINT,
        user=USER,
        password=token,
        port=int(PORT),  # 转整数
        database=DBNAME,
        ssl_ca='certbundle.pem',
        ssl_verify_identity=False,
        ssl={'verify_mode': ssl.CERT_REQUIRED}
    )
    # ... 后续代码 ...

额外检查点

  • 确保ssl_ca参数指向实际存在的certbundle.pem证书文件路径,而非占位符SSLCERTIFICATE
  • 确认IAM用户拥有rds-db:connect权限,且RDS实例已启用IAM数据库认证

内容的提问来源于stack exchange,提问作者Magic Maverick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:52:06