如何从 Java 客户端获取用于连接到 CockroachDB 的客户端密钥和客户端根证书

how to get a client key and client root cert for connecting to CockroachDB from Java client

我已经在 DO 上的 Kubernetes 集群中部署了一个 CockroachDB 单实例集群 link https://www.cockroachlabs.com/docs/stable/orchestrate-a-local-cluster-with-kubernetes.html

我按照这个 link 使用以下命令从 https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster 生成了一个 server.crt 文件:

kubectl get csr my-svc.my-namespace -o jsonpath='{.status.certificate}' \
| base64 --decode > server.crt

不确定我是否获得了客户证书。
以下是我的命令输出:

kubectl get csr

NAME                  AGE       REQUESTOR                                              CONDITION
default.client.root   44m       system:serviceaccount:default:my-release-cockroachdb   Approved,Issued

我需要使用我的 Java 客户端连接到 CockroachDB。如何生成客户端证书和密钥以便我可以从 Java 访问 CockroachDB?

谢谢

这里有多个问题:

  • 您从 k8s PKI 请求的证书将没有任何必填字段
  • 密钥格式不适用于 java 客户

让我们一次解决一个问题:

正在从 kubernetes PKI 请求客户端证书

使用 CockroachDB 的用户的客户端证书必须将主题的公用名设置为用户名。例如:CN=root。这也必须正确配置以允许 Client Authentication 在密钥用法中。

在安全客户端的 kubernetes docs, we include an example to bring up a client within the same kubernetes cluster. The config 中包含一个初始化容器,它请求客户端证书并使其可用于主要作业。

如果您的客户端是 运行 在 Kubernetes 中,我建议为您自己的客户端调整该配置。

java 客户端的密钥格式

Java 客户端需要 PKCS#8 格式的密钥,而您的命令和 request-cert 工具输出的证书都输出 PEM 编码密钥。

您可以使用 openssl 转换密钥:

openssl pkcs8 -topk8 -inform PEM -outform DER -in client.myuser.key -out client.myuser.pk8

您可以在 CockroachDB Build a Java app page 上找到更多详细信息。