调用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.createcloudkms.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
相关产品推荐
相关产品推荐

