Cryptography 使用openssl dgst验证文件签名

Cryptography 使用openssl dgst验证文件签名,cryptography,openssl,signing,Cryptography,Openssl,Signing,我正在用一些Java代码对数据包进行签名,我想在C服务器上验证签名。为此,我想使用openssl(当我知道openssl可以验证签名时,以后可以始终使用库函数);然而,它没有做到这一点: openssl dgst -verify cert.pem -signature file.sha1 file.data 它只说“无法加载密钥文件” 证书上写着: openssl verify cert.pem cert.pem: /C=.... error 20 at 0 depth lookup:

我正在用一些Java代码对数据包进行签名,我想在C服务器上验证签名。为此,我想使用openssl(当我知道openssl可以验证签名时,以后可以始终使用库函数);然而,它没有做到这一点:

openssl dgst -verify cert.pem -signature file.sha1 file.data
  • 它只说“无法加载密钥文件”
证书上写着:

openssl verify cert.pem 

cert.pem: /C=....
error 20 at 0 depth lookup:unable to get local issuer certificate
但是,我特别不关心验证证书,我只想验证给定文件的签名

cert.pem-noout-text中的
openssl x509的输出为:

Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            ...
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=...
        Validity
            Not Before: Feb  1 15:22:44 2010 GMT
            Not After : Jun 19 15:22:44 2037 GMT
        Subject: C=...
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:cc:cc:f9:c7:3a:00:0f:07:90:55:d9:fb:a9:fe:
                    ...
                    32:cc:ee:7f:f2:01:c7:35:d2:b5:9b:35:dd:69:76:
                    00:a9
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
        39:d6:2c:6b:6a:00:74:b5:81:c2:b8:60:d6:6b:54:11:41:8d:
        ...
        8f:3e:3f:5d:b3:f8:dd:5e

openssl dgst-验证foo.pem
期望
foo.pem
包含pem格式的“原始”公钥。原始格式是
SubjectPublicKeyInfo
结构的编码,可以在证书中找到;但是
openssl dgst
无法一次性处理完整的证书

您必须首先从证书中提取公钥:

openssl x509 -pubkey -noout -in cert.pem > pubkey.pem
然后使用密钥验证签名:

openssl dgst -verify pubkey.pem -signature sigfile datafile

我认为cert.pem存在一些问题。“openssl x509-in cert.pem-noout-text”的输出是什么?@Anders Lindahl我在问题中补充了这一点幸运的是,文件扩展名看起来并不重要。用这种方法从.crt文件中提取公钥对我来说也很有效。