You need to enable JavaScript to run this app. K8s部署的Hashicorp Vault证书认证失效,如何配置服务端与客户端证书?
优惠活动
大模型
产品
解决方案
定价
更多

K8s部署的Hashicorp Vault证书认证失效,如何配置服务端与客户端证书?

问题根因

你当前使用的是Vault服务端证书作为客户端登录凭证,该证书的扩展密钥用法仅声明了serverAuth(服务端身份认证),缺少客户端认证必需的clientAuth扩展密钥用法,因此触发密钥用法不兼容的报错。

服务端证书和客户端证书是两类用途不同的证书,不可混用。你之前生成的vault.key、vault.crt仅用于客户端验证Vault服务端的身份,不能作为客户端登录的认证凭证。

解决步骤

1. 生成专用客户端证书

你需要额外生成一对带clientAuth密钥用法的客户端证书,可直接通过K8s内置CA签发,操作如下:

  • 生成客户端私钥
openssl genrsa -out /tmp/client-web.key 2048
  • 创建客户端CSR配置文件,注意添加clientAuth扩展密钥用法
cat <<EOF >/tmp/client-csr.conf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth
EOF
  • 生成客户端证书签名请求(CSR)
openssl req -new -key /tmp/client-web.key -subj "/CN=web" -out /tmp/client-web.csr -config /tmp/client-csr.conf
  • 创建并提交K8s CertificateSigningRequest资源
export CLIENT_CSR_NAME=vault-client-web-csr
cat <<EOF >/tmp/client-csr.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: ${CLIENT_CSR_NAME}
spec:
  groups:
  - system:authenticated
  request: $(cat /tmp/client-web.csr | base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - client auth
EOF
kubectl create -f /tmp/client-csr.yaml
  • 批准客户端CSR
kubectl certificate approve ${CLIENT_CSR_NAME}
  • 导出签发后的客户端证书
clientCert=$(kubectl get csr ${CLIENT_CSR_NAME} -o jsonpath='{.status.certificate}')
echo "${clientCert}" | openssl base64 -d -A -out /tmp/client-web.crt

CA证书仍使用你之前导出的vault.ca即可。

2. 配置Vault cert认证引擎

先使用root token或其他有权限的账号登录Vault,完成cert认证的基础配置:

  • 开启cert认证引擎
vault auth enable cert
  • 配置信任的CA证书,绑定登录角色
vault write auth/cert/certs/web \
    display_name=web \
    policies=default \
    certificate=@/tmp/vault.ca \
    allowed_common_names=web \
    ttl=3600

参数说明:

  • policies可替换为你需要给该登录身份分配的权限策略
  • allowed_common_names要和客户端证书的CN(当前为web)保持一致

3. 执行证书登录

使用新生成的客户端证书执行登录即可:

vault login \
    -method=cert \
    -ca-cert=/tmp/vault.ca \
    -client-cert=/tmp/client-web.crt \
    -client-key=/tmp/client-web.key \
    name=web

内容的提问来源于stack exchange,提问作者Ana Franco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:09:01