我基于此创建了一个 cockroachdb v20.1.0 集群:https ://www.cockroachlabs.com/docs/stable/deploy-cockroachdb-on-premises.html
我还创建了一个这样的测试用户:
CREATE USER test with password '****';
CREATE DATABASE test;
GRANT ALL ON DATABASE test TO test;
SHOW GRANTS ON DATABASE test;
SHOW GRANTS FOR test;
然后我创建了一个名为 test 的 unix 用户,并尝试连接到这个数据库。
我把它放到 .pgpass 中:
localhost:26257:test:test:*****
如果我尝试连接 psql 客户端,一切似乎都很好:
psql --host=localhost -d test -p 26257
psql (12.2 (Ubuntu 12.2-4), server 9.5.0)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128, compression: off)
Type "help" for help.
test=>
连接使用 TLSv1.0 加密,认证成功。
但是,如果我尝试使用 cocroachdb sql 命令连接,则会失败:
$ cockroach sql --host=localhost --user=test 130 ↵
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
ERROR: cannot load certificates.
Check your certificate settings, set --certs-dir, or use --insecure for insecure clusters.
problem with CA certificate: not found
Failed running "sql"
cockroachdb 文档 ( https://www.cockroachlabs.com/docs/stable/authentication.html#client-authentication ) 中明确指出 cockroachdb 客户端始终需要 CA 证书来验证节点的证书。
在 postgresql 文档(https://www.postgresql.org/docs/12/libpq-ssl.html)中,他们说如下:
默认情况下,PostgreSQL 不会对服务器证书进行任何验证。这意味着可以在客户端不知情的情况下欺骗服务器身份(例如通过修改 DNS 记录或通过接管服务器 IP 地址)。为了防止欺骗,客户端必须能够通过信任链验证服务器的身份。
该文档还告诉当“sslmode 设置为 verify-full”时,libpq 将验证服务器的证书。
但是,我没有看到任何命令行选项(用于 psql 命令!)强制打开证书验证。
是否有用于 psql 的环境变量或命令行选项将强制检查连接的证书?