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

Windows本地Vault实例签署CSR时提示‘csr contains no data’

Vault签署中间CA时"csr contains no data"错误解决方法

问题背景

按照官方教程使用Vault签署中间CA时,执行签署命令持续收到csr contains no data错误,尝试了@file引用、变量存储、内联内容等方式均无效,PowerShell中无法识别网上提到的反引号处理方法;抓包发现用@引用文件时,发送内容每个字符间带有\u0000,内联内容格式看似正常但仍报错。

原执行命令

vault write -format=json rootCA/root/sign-intermediate `
issuer_ref="root" `
csr=@nt.csr `
format=pem_bundle ttl="43800h" `
| jq -r ".data.certificate" > int.cert.pem

错误信息

Error writing data to rootCA/root/sign-intermediate: Error making API request.

URL: PUT http://localhost:8200/v1/rootCA/root/sign-intermediate
Code: 400. Errors:

* csr contains no data

解决方法

1. 修正PowerShell的CSR内容读取方式

PowerShell默认以UTF-16编码读取文件,导致发送给Vault的内容带有空字节\u0000,需强制以UTF-8读取并传入:

$csrContent = Get-Content -Path .\nt.csr -Raw -Encoding UTF8
vault write -format=json rootCA/root/sign-intermediate issuer_ref="root" csr="$csrContent" format=pem_bundle ttl="43800h" | jq -r ".data.certificate" > int.cert.pem
  • -Raw参数确保读取整个CSR为单字符串,保留原始换行格式
  • -Encoding UTF8避免UTF-16编码带来的空字节问题

2. 使用子表达式直接嵌入CSR内容

也可以直接用子表达式在命令中读取文件,省去变量步骤:

vault write -format=json rootCA/root/sign-intermediate issuer_ref="root" csr="$(Get-Content -Path .\nt.csr -Raw -Encoding UTF8)" format=pem_bundle ttl="43800h" | jq -r ".data.certificate" > int.cert.pem

3. 验证CSR文件有效性

如果上述方法仍无效,先检查CSR文件本身是否合法:

openssl req -in nt.csr -text -noout

若命令报错,说明CSR文件损坏或格式错误,需重新生成符合PEM标准的CSR文件。

注意事项

  • PowerShell不支持类Unix shell的@filename语法,不要用反引号转义@
  • 确保Vault客户端与服务器版本一致,避免API兼容性问题
  • 确认PKI引擎已正确挂载到rootCA路径,且root issuer存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:18:20