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

OpenSSL dgst跨机器验证失败问题排查求助

OpenSSL跨架构签名验证失败排查方向

问题背景

我使用以下命令在x86-Ubuntu机器上对testfile进行签名与验证:
签名命令:

openssl dgst -sha256 -sign privkey -out sig.sha256 testfile

验证命令:

openssl dgst -sha256 -verify pubkey.pem -signature sig.sha256 testfile

x86-Ubuntu上的OpenSSL版本包括:

  • OpenSSL 1.1.1b 26 Feb 2019
  • 单独路径编译安装的OpenSSL 1.0.2o 27 Mar 2018
    在x86环境下验证完全正常,但将testfile、sig.sha256及pubkey.pem复制到ARM-Linux/Yocto机器(OpenSSL版本同为OpenSSL 1.0.2o 27 Mar 2018)后,验证每次都失败,以下是具体排查方向:

排查方向

1. 验证文件完整性

先确认跨机器复制的三个文件没有损坏:
在x86和ARM机器上分别计算文件的SHA256哈希值并对比:

# x86机器执行
sha256sum testfile sig.sha256 pubkey.pem > x86_hashes.txt

# ARM机器执行
sha256sum testfile sig.sha256 pubkey.pem > arm_hashes.txt

对比两个哈希文件的内容,若不一致说明文件传输过程中损坏,建议用scp或rsync等二进制安全的传输工具重新复制,避免使用文本模式传输二进制文件。

2. 检查OpenSSL编译配置差异

虽然版本号相同,但x86和ARM平台的OpenSSL编译配置可能存在差异:

  • 查看ARM机器支持的算法列表,对比x86机器的输出:
    # 查看支持的摘要算法
    openssl list-message-digest-algorithms
    # 查看支持的公钥算法
    openssl list-public-key-algorithms
    
    确认ARM版本是否开启了SHA256和签名所用的公钥算法(如RSA)。
  • 检查ARM版本是否启用了硬件加速,部分硬件加速实现可能存在兼容性问题,可尝试临时禁用后重新验证(例如设置环境变量OPENSSL_armcap=0,具体参数根据ARM架构调整)。

3. 确认公钥格式兼容性

检查ARM机器能否正确解析公钥文件:
在ARM机器上执行以下命令,查看公钥详细信息:

openssl rsa -pubin -in pubkey.pem -text -noout

如果报错,说明公钥格式存在兼容性问题。可在x86机器上重新导出通用格式的公钥:

openssl rsa -in privkey -pubout -out pubkey_new.pem

将新生成的pubkey_new.pem复制到ARM机器再次验证。

4. 对比签名文件的ASN.1结构

OpenSSL在不同架构下的签名二进制输出可能存在端序或ASN.1编码差异:
分别在x86和ARM机器上解析签名文件:

openssl asn1parse -in sig.sha256

对比两次输出的ASN.1结构是否完全一致,若存在差异,说明签名文件的编码在跨架构解析时出现问题。

5. 检查文件权限

确保ARM机器上的三个文件拥有可读权限:

ls -l testfile sig.sha256 pubkey.pem

若权限不足(如无读权限),执行chmod 644 testfile sig.sha256 pubkey.pem调整权限后重新验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:00:55