为何SSH访问CockroachDB需CA证书与账号密码,Python仅需账号密码?
连接CockroachDB时官方客户端与Python客户端的差异原因
核心差异源于两种客户端默认的SSL验证策略不同,结合CockroachDB的认证配置导致:
官方CockroachDB命令行客户端(cockroach sql)的默认规则
官方客户端默认启用sslmode=verify-full模式,这要求客户端必须完成两项验证:一是用CA证书确认服务器SSL证书由可信机构签发,二是验证证书中的主机名与连接地址匹配。因此必须同时提供CA证书和账号密码才能建立连接。sqlalchemy-cockroachdb 1.4.4的默认规则
你使用的这个版本的SQLAlchemy适配器,默认采用sslmode=require模式——只要求连接通过SSL加密,但不验证服务器证书的合法性,不需要CA证书做身份校验。只要提供正确的账号密码,就能完成身份认证并建立加密连接。如果你的连接URL没有显式指定sslrootcert或更高严格度的sslmode(比如verify-ca/verify-full),就会沿用这个默认逻辑。集群配置的潜在影响
如果你的CockroachDB集群设置了sql.auth.mode=password(仅允许密码认证),而非默认的password,cert(同时支持证书和密码认证),会进一步弱化对CA证书的要求,让仅密码连接的行为更直接。
验证方法
你可以通过以下操作验证上述结论:
- 修改Python连接URL,添加
sslmode=verify-full&sslrootcert=/path/to/ca.crt,此时Python连接会强制要求CA证书,否则报错 - 使用官方客户端时加上
--sslmode=require参数,此时无需CA证书,仅用密码即可连接
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

