我正在尝试验证 .zip 文件中的信任库。我已经能够在我的工作站(装有 ubuntu OpenSSL 1.0.1f 6 Jan 2014
)中验证它。
openssl dgst -ecdsa-with-SHA1 -verify <(openssl x509 -sha1 -in signature-certificate.pem -noout -pubkey) -signature truststore.zip.dgst truststore.zip
如上所述,这在我的工作站上运行良好,但是,在我的服务器上运行它时出现此错误:
Error opening signature file truststosre.zip.dgst
3069867216:error:02001002:system library:fopen:No such file or directory:bss_file.c:165:fopen('truststosre.zip.dgst','rb')
3069867216:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:168:
我应该提到,“服务器”有OpenSSL 1.0.2 22 Jan 2015
一个/bin/bash
版本14.3.30(1)-release
有人能解释一下为什么我的服务器没有验证相同的文件对吗?
答案1
OpenSSL 中的错误意味着它找不到您指定的文件:
3069867216:error:02001002:system library:fopen:No such file or directory:bss_file.c:165:fopen('truststosre.zip.dgst','rb')
如果您在运行 openssl 时没有设置环境变量,或者从另一个进程启动 openssl,则可能会发生这种情况。
首先,尝试指定truststosre.zip.dgst
文件的完整路径,如果这没有帮助 - 您应该检查启动 openssl 的用户(即,如果它是在 PHP 脚本中启动的,则为用户www-data
)是否有足够的权限访问该文件。
用户的命令www-data
是:
sudo -u www-data cat /path/to/truststosre.zip.dgst
如果用户没有足够的权限 - 您将收到Permission denied
错误。
PS 仔细观察就会发现一个可能的巧妙解决方案,它涉及修复最普遍的 IT 相关错误类型 - 输入错误:
当您尝试验证 PC 上的文件时,它被称为truststore.zip.dgst
,而您在远程服务器上访问truststo**s**re.zip.dgst
。尝试删除它“s”我敢打赌它会立即开始发挥作用!