使用 openssl dgst 验证文件签名

发布于 2024-08-24 03:30:03 字数 1372 浏览 3 评论 0原文

我正在一些 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

但是,我特别不关心验证证书,我只想验证给定文件的签名!

openssl x509 -in cert.pem -noout -text 的输出是:

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

I am signing packets in some Java code and I want to verify the signatures on a C server. I want to fork openssl for this purpose (can always use library functions later... when I know openssl can verify the signatures); however, it's failing to do so:

openssl dgst -verify cert.pem -signature file.sha1 file.data
  • all it says is "unable to load key file"

The certificate says:

openssl verify cert.pem 

cert.pem: /C=....
error 20 at 0 depth lookup:unable to get local issuer certificate

However, I specifically don't care about verifying the certificate, I want only to verify the signature for a given file!

The output of openssl x509 -in cert.pem -noout -text is:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

听你说爱我 2024-08-31 03:30:03

openssl dgst -verify 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

openssl dgst -verify foo.pem expects that foo.pem contains the "raw" public key in PEM format. The raw format is an encoding of a SubjectPublicKeyInfo structure, which can be found within a certificate; but openssl dgst cannot process a complete certificate in one go.

You must first extract the public key from the certificate:

openssl x509 -pubkey -noout -in cert.pem > pubkey.pem

then use the key to verify the signature:

openssl dgst -verify pubkey.pem -signature sigfile datafile
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文