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机器的输出:
确认ARM版本是否开启了SHA256和签名所用的公钥算法(如RSA)。# 查看支持的摘要算法 openssl list-message-digest-algorithms # 查看支持的公钥算法 openssl list-public-key-algorithms - 检查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.
相关产品推荐
相关产品推荐

