Cockroach DB 无法创建客户端证书

问题描述

我已经使用教程 here 在我的 Linux (WSL2 Ubuntu 20.04) 上安装了 Cockroach DB。

但是,当我在步骤 1.4 中尝试为 root 用户创建客户端证书和密钥对时,出现以下错误

W210412 14:47:47.996624 1 security/certificate_loader.go:356  error finding key for certs/node.crt: key file certs/node.key has permissions -rwxrwxrwx,exceeds -rwx------

错误:无法生成客户端证书和密钥:密钥文件 certs/node.key 具有权限 -rwxrwxrwx,超过 -rwx------ 运行“cert create-client”失败 因此,我无法在下一步中启动集群。

解决方法

CockroachDB 要求密钥文件具有健全的权限(仅限所有者)。 但是,用于 linux 的 windows 子系统对文件权限的处理很奇怪(有关详细信息,请参阅 this WSL doc)。

您有两个选择:

  • 如果可能,找出如何更改 WSL2 上的文件权限
  • 告诉 CockroachDB 跳过关键文件权限

后者在certificates documentation中描述:

密钥(以 .key 结尾的文件)不得具有组或世界权限 (最大权限为 0700,或 rwx------)。这个检查可以 通过设置环境变量禁用 COCKROACH_SKIP_KEY_PERMISSION_CHECK=真。

使用此信息,我们可以更改教程的第 1.4 步。

默认行为给出了您遇到的错误:

$ cockroach cert create-client root --certs-dir=certs --ca-key=my-safe-directory/ca.key 
W210412 15:05:44.419689 1 security/certificate_loader.go:356  error finding key for certs/node.crt: key file certs/node.key has permissions -rwxrwxrwx,exceeds -rwx------
ERROR: failed to generate client certificate and key: key file certs/node.key has permissions -rwxrwxrwx,exceeds -rwx------
Failed running "cert create-client"

使用 COCKROACH_SKIP_KEY_PERMISSION_CHECK=true 环境变量,我们可以让它忽略文件权限并继续:

$ COCKROACH_SKIP_KEY_PERMISSION_CHECK=true cockroach cert create-client root --certs-dir=certs --ca-key=my-safe-directory/ca.key 

如果您确实使用此变通方法,则还需要使用它来启动 cockroach 服务器。