使用Python连接AWS不同区域Redshift遇SSL拒绝错误求助
解决Redshift跨区域SSL连接拒绝问题
核心原因
Redshift不同AWS区域确实使用不同的根证书,redshift_connector默认携带的证书集合未包含ap-southeast-1区域的根证书,导致SSL握手失败;而AWS CLI会自动适配对应区域的证书逻辑,因此能正常连接。
解决方案
1. 指定对应区域的SSL证书路径
AWS为每个Redshift区域提供了专属根证书,你需要下载ap-southeast-1区域的证书并在连接时指定:
- 获取证书:从AWS官方提供的区域证书包中提取
rs-ca-ap-southeast-1.pem文件 - 修改连接代码,添加SSL相关参数:
import redshift_connector import logging logging.basicConfig(level=logging.DEBUG) connection = redshift_connector.connect( database='my_db', host='redshift_host_ap_southeast_1', port=5439, user='username', password='password', ssl=True, sslmode='verify-full', sslrootcert='/your/local/path/rs-ca-ap-southeast-1.pem' # 替换为实际证书路径 ) cur = connection.cursor()
2. 临时调整SSL验证模式(测试用)
如果暂时无法获取证书,可先将SSL模式调整为require(仅建立SSL连接,不验证证书有效性),确认连接是否能正常建立:
connection = redshift_connector.connect( # 保留原有参数 sslmode='require' )
注意:此方法仅用于排查问题,生产环境必须使用
verify-full模式确保连接安全性。
3. 检查Redshift集群SSL配置
登录AWS控制台,确认ap-southeast-1区域的Redshift集群SSL设置:
- 进入集群详情页,查看数据库配置中的
SSL连接选项 - 若设置为
强制SSL连接,必须使用对应区域的有效证书验证;若为允许SSL连接,可尝试降低SSL模式适配
补充说明
us-east-2区域能正常连接,是因为redshift_connector默认证书包包含了该区域的根证书,而ap-southeast-1的证书不在默认集合内,因此需要手动指定。
内容的提问来源于stack exchange,提问作者Bunny Talks
相关产品推荐
相关产品推荐

