使用Python SDK连接Couchbase集群遇UnAmbiguousTimeoutException报错
解决Python SDK连接Couchbase集群的UnAmbiguousTimeoutException异常
问题根源
你遇到的UnAmbiguousTimeoutException本质不是网络超时,而是SSL证书名称不匹配导致握手失败——.NET SDK通过HttpIgnoreRemoteCertificateMismatch和KvIgnoreRemoteCertificateNameMismatch跳过了证书名称校验,所以能正常连接;Python SDK默认启用证书校验,握手失败后触发超时异常。
Python SDK对应配置方法
Python SDK没有直接命名为“忽略证书名称不匹配”的开关,但可以通过自定义SSL上下文实现相同效果,分别针对KV和HTTP服务配置:
1. 创建禁用证书校验的SSL上下文
import ssl # 创建SSL上下文,禁用hostname检查与证书验证 ssl_ctx = ssl.create_default_context() ssl_ctx.check_hostname = False # 对应忽略证书名称不匹配 ssl_ctx.verify_mode = ssl.CERT_NONE # 跳过证书有效性校验(可选,根据集群配置调整)
2. 在ClusterOptions中配置KV和HTTP服务的SSL选项
from couchbase.cluster import Cluster, ClusterOptions from couchbase.auth import PasswordAuthenticator # 初始化认证与集群选项 auth = PasswordAuthenticator("你的用户名", "你的密码") options = ClusterOptions(auth) # 为KV服务设置SSL上下文(对应.NET的KvIgnoreRemoteCertificateNameMismatch) options.kv_ssl_options = ssl_ctx # 为HTTP服务(查询、索引、管理等)设置SSL上下文(对应.NET的HttpIgnoreRemoteCertificateMismatch) options.http_ssl_options = ssl_ctx # 连接集群并等待就绪 cluster = Cluster("couchbases://你的集群地址", options) cluster.wait_until_ready(timeout=30) # 延长超时时间确保连接完成
验证要点
- 确认连接字符串使用
couchbases://(SSL协议),而非couchbase:// - 如果集群证书是自签名的,
verify_mode = ssl.CERT_NONE是必要的;如果是CA签发但名称不匹配,仅设置check_hostname = False即可 - 超时时间建议设为30秒以上,避免因SSL握手耗时导致误判
内容的提问来源于stack exchange,提问作者aminrd
相关产品推荐
相关产品推荐

