Azure KeyVault与OpenSSL同配置CSR签名差异原因问询
Azure KeyVault与OpenSSL生成CSR签名差异的原因分析
签名算法的实现细节差异
虽然两者都标称使用sha256WithRSAEncryption,但实际签名时的填充方式、ASN.1编码细节可能不一样。比如Azure KeyVault可能采用了PKCS#1 v1.5填充的特定实现,或者在编码签名值时的字节序、DER编码格式和OpenSSL有细微区别——这些细节不会被openssl req -text -noout -verify -in csr.csr命令输出,但会直接导致签名结果不同。CSR隐式结构字段的差异
openssl req -text只会展示CSR的核心可见内容,不会输出所有ASN.1结构细节:- 可选字段的默认值处理不同:比如某些扩展的
critical标记默认设置,或者CSR版本字段的编码方式,即使逻辑上一致,DER编码的字节流可能有差异 - 字段排序顺序不同:ASN.1 DER编码要求字段按指定顺序排列,如果Azure和OpenSSL对某些可选字段的排序逻辑不同,待签名的原始数据哈希输入就会不一样,最终签名自然不同。
- 可选字段的默认值处理不同:比如某些扩展的
待签名数据的范围差异
CSR签名是对除签名段外的整个CSR主体做哈希后再签名。如果Azure KeyVault和OpenSSL在构建待签名的原始DER数据时,包含的隐式元数据、空白字节不同,比如某些字段是否额外补零、可选字段的存在形式不同,哪怕text输出看起来完全一致,实际待哈希的原始字节流已经有区别,签名结果必然不同。私钥签名的执行环境差异
你拿到的私钥虽然和KeyVault生成CSR时用的是同一个,但Azure可能是通过硬件安全模块(HSM)执行签名操作,HSM的RSA签名实现和OpenSSL的软件实现可能存在细微差异,这种差异不会体现在私钥本身,但会影响最终的签名值。
内容的提问来源于stack exchange,提问作者XWIKO
相关产品推荐
相关产品推荐

