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

Azure Key Vault与OpenSSL RS256签名结果不一致问题求助

Azure Key Vault RS256签名与OpenSSL结果不一致的解决方法

核心问题

使用Azure Key Vault (AKV) REST API对SHA256哈希执行RS256签名后,AKV自身验证可通过,但用从AKV下载的PFX提取的私钥通过OpenSSL签名,结果与AKV返回的签名完全不同,需对齐两者的签名逻辑。

问题根源与解决方案

1. 签名格式差异:ASN.1包装区别

AKV的RS256签名直接对原始SHA256哈希二进制数据执行PKCS#1 v1.5格式的RSA签名,而OpenSSL的openssl dgst -sha256 -sign默认会在哈希值前添加ASN.1结构的摘要标识符(如SHA256对应的OID),导致签名结果不一致。

解决命令:使用openssl rsautl直接对原始哈希签名,跳过ASN.1包装:

echo -n $base64EncodedSHA256Digest | base64 -d | openssl rsautl -sign -inkey private.pem -raw | base64

其中-raw参数指定直接对输入二进制数据执行RSA签名,和AKV的RS256行为完全对齐。

2. PFX提取私钥的格式问题

从AKV下载的PFX可能包含证书链,提取私钥时需确保格式为PKCS#1标准格式(而非PKCS#8):

  • 先提取私钥:
    openssl pkcs12 -in your-cert.pfx -nocerts -out private.pem -nodes
    
  • 若私钥是PKCS#8格式(开头为-----BEGIN PRIVATE KEY-----),转换为PKCS#1格式:
    openssl pkcs8 -in private.pem -out rsa-private.pem -traditional
    

使用转换后的rsa-private.pem执行签名命令。

3. 输入数据一致性校验

确保传给AKV的$base64EncodedSHA256Digest和传给OpenSSL的内容完全一致(无额外换行、空格),可通过以下命令验证:

echo -n $base64EncodedSHA256Digest | base64 -d | sha256sum

对比该结果与AKV签名时使用的哈希值的哈希,确保输入完全匹配。

4. 验证逻辑对齐测试

用OpenSSL验证AKV返回的签名,确认格式正确性:

  • 从PFX提取公钥:
    openssl pkcs12 -in your-cert.pfx -clcerts -nokeys -out cert.pem
    openssl x509 -in cert.pem -pubkey -noout -out public.pem
    
  • 验证AKV签名:
    echo -n $base64EncodedSHA256Digest | base64 -d | openssl rsautl -verify -inkey public.pem -pubin -raw -signature <(echo $responseReturnedFromCallToSign | base64 -d)
    

若验证通过,说明AKV签名格式为原始RSA签名,调整OpenSSL签名命令即可匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:00:09