You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Vault TLS证书验证失败:缺少IP SANs无法初始化

解决Vault TLS证书无IP SANs导致的初始化错误

你遇到的这个错误核心原因很明确:你的TLS证书里没有包含127.0.0.1这个IP地址的Subject Alternative Name(SAN)。现代TLS客户端(包括Vault)验证证书时,会严格检查请求的IP/域名是否在证书的SAN列表里,仅靠CN字段已经不足以通过验证了。不用-tls-skip-verify是对的,那只是临时规避,下面咱们来彻底解决这个问题:

步骤1:修改openssl.cnf配置文件,添加IP SANs

你需要在openssl配置里明确指定SAN扩展,把127.0.0.1(以及你可能用到的Docker容器IP、域名)加进去。以下是完整的配置示例,你可以根据自己的需求调整:

[ ca ]
default_ca = testca

[ testca ]
dir = .
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/newcerts
private_key = $dir/cakey.pem
serial = $dir/serial
default_days = 365
default_md = sha256
policy = testca_policy
x509_extensions = testca_extensions

[ testca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName = supplied
organizationalUnitName = supplied

[ testca_extensions ]
basicConstraints = CA:false
subjectAltName = @alt_names
keyUsage = digitalSignature,keyEncipherment

[ req ]
prompt = no
default_bits = 2048
default_md = sha256
distinguished_name = dn
req_extensions = v3_req

[ dn ]
CN = localhost
O = YourOrganization
OU = YourTeam
L = YourCity
ST = YourState
C = US
emailAddress = admin@yourdomain.com

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
IP.1 = 127.0.0.1
# 如果你的Docker容器有固定IP,也可以加上
# IP.2 = 172.17.0.2
DNS.1 = localhost
# 如果用域名访问Vault,添加对应的DNS条目
# DNS.2 = vault.yourdomain.com

步骤2:重新生成符合要求的证书

先清理之前生成的旧证书文件(如果有的话),然后按以下步骤重新生成:

  1. 生成CA密钥和根证书:
openssl req -new -x509 -days 3650 -keyout cakey.pem -out cacert.pem -config openssl.cnf
  1. 生成Vault服务器的密钥和证书签名请求(CSR):
openssl genrsa -out vault.key 2048
openssl req -new -key vault.key -out vault.csr -config openssl.cnf
  1. 用CA签署服务器证书:
# 先初始化CA所需的文件(第一次执行需要)
touch index.txt
echo 01 > serial

openssl ca -in vault.csr -out vault.crt -config openssl.cnf -extensions testca_extensions

步骤3:配置并启动Vault Docker容器

首先创建一个Vault配置文件config.hcl,指定证书路径:

listener "tcp" {
  address = "0.0.0.0:8200"
  tls_cert_file = "/vault/certs/vault.crt"
  tls_key_file = "/vault/certs/vault.key"
  tls_client_ca_file = "/vault/certs/cacert.pem"
}

storage "file" {
  path = "/vault/data"
}

disable_mlock = true

然后用Docker启动Vault,挂载证书和配置文件:

docker run -d \
  --name vault-server \
  -v $(pwd)/config.hcl:/vault/config/config.hcl \
  -v $(pwd)/:/vault/certs \
  -p 8200:8200 \
  hashicorp/vault server -config=/vault/config/config.hcl

步骤4:验证Vault初始化

设置Vault环境变量时,指定CA证书路径,这样客户端就能正常验证证书了:

export VAULT_ADDR=https://127.0.0.1:8200
export VAULT_CACERT=$(pwd)/cacert.pem

现在执行vault init,应该就能顺利完成初始化,不会再出现x509验证错误了。

内容的提问来源于stack exchange,提问作者Maciej Ziniewicz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:02:17