这种问题可能是由于 KeyVault 中证书的有效性未得到正确处理导致的。
为了解决此问题,您可以在代码中添加以下代码段来验证证书:
let cert = keyCertResult.x5c[0];
let errors = new Array();
let certvalid = crypto.createVerify('RSA-SHA256');
let publicKey = x509.getPublicKey();
certvalid.update(signed, "utf8");
if (!certvalid.verify(publicKey, signature, 'hex')) errors.push('Signature is not valid');
x509.readCertPEM(cert);
if (!x509.validateCertExpiration(cert)) errors.push('Certificate has expired');
if (x509.getExtAsObject(x509.getExtKeyUsage(cert)).length != 2) errors.push('Certificate key usage is invalid');
if (errors.length > 0) throw new Error (errors.join(','));
这段代码将读取证书并验证其有效性,包括签名、过期日期和密钥使用。 如果证书验证失败,将抛出一个错误。
此外,还可通过更新 KeyVault 配置来解决此问题。 在 KeyVault 配置中启用 SHA256 证书算法。
PS C:\Windows\system32> Set-AzKeyVaultKeyAlgorithm -VaultName contoso-dev -Name testkey -Destination Software -Algorithm RSA-HSM -KeySize 4096
PS C:\Windows\system32> Set-AzKeyVaultKeyAlgorithm -VaultName contoso-dev -Name testkey -Destination HSM -Algorithm RSA-HSM -KeySize 4096
这将设置 KeyVault 使用 HSM 硬件加密模块并启用 RSA 算法。 集成这些更新之后,您应该能够验证签名。
上一篇:Azure可用性集中,只有一个故障域和一个更新域有什么意义?
下一篇:Azure控制台中未显示MicrosoftApplicationInsights,Fiddler显示dc.services.visualstudio.com返回200响应。