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

调用Google HSM API生成CSR时fetch() JSON解析错误如何解决?

解决Google KMS API生成CSR时JSON解析错误问题

问题根源

返回<DOCTYPE>开头的HTML而非JSON,说明API请求失败,服务器返回了错误页面而非预期的JSON响应,常见触发原因包括请求路径错误、令牌权限不足、请求体格式不规范。

解决步骤

1. 先排查响应状态与错误详情

先跳过JSON解析,优先获取响应状态码和错误文本,明确具体问题:

const response = await fetch(`https://cloudkms.googleapis.com/v1/projects/${projectId}/locations/${locationId}/keyRings/my-key-ring/cryptoKeys/${keyId}:createCertificateSigningRequest`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${access_token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(requestBody),
});

// 检查响应状态是否正常
if (!response.ok) {
  const errorContent = await response.text();
  console.error('请求失败,状态码:', response.status, '错误内容:', errorContent);
  return;
}

// 状态正常再解析JSON
const responseBody = await response.json();
const csrPem = responseBody.pemCsr;

2. 修正请求路径(最常见错误)

createCertificateSigningRequest接口的操作对象是密钥版本,而非密钥容器本身,原路径缺少cryptoKeyVersions/${versionId}部分,正确路径应为:

`https://cloudkms.googleapis.com/v1/projects/${projectId}/locations/${locationId}/keyRings/my-key-ring/cryptoKeys/${keyId}/cryptoKeyVersions/${versionId}:createCertificateSigningRequest`

替换${versionId}为你的密钥版本ID(比如1、2,可在Google Cloud控制台KMS页面查看)。

3. 验证access_token的有效性与权限

  • 确保令牌未过期,可通过gcloud auth print-access-token生成有效令牌测试
  • 确保持令牌的账号拥有以下权限:
    • cloudkms.certificateSigningRequests.create
    • cloudkms.cryptoKeyVersions.useToSign(针对目标密钥版本)

4. 检查requestBody格式合规性

请求体必须包含API要求的字段,示例格式:

{
  "subject": "CN=your-domain.com,O=Your Organization",
  "keyUsage": ["DIGITAL_SIGNATURE", "KEY_ENCIPHERMENT"],
  "hashAlgorithm": "SHA256"
}

确保字段名称、枚举值(如hashAlgorithm、keyUsage)完全符合Google KMS API规范。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21