使用openssl的文件的数字签名

时间:2012-05-28 10:07:34

标签: cryptography openssl rsa

有没有办法使用openssl对x509证书或任何文档进行数字签名?

3 个答案:

答案 0 :(得分:54)

签署/验证单身的替代方式,受Anders Lindahl's answer启发。

签署

openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file 

验证

# dgst -verify requires the public key
openssl x509 -in snakeoil.crt -pubkey -noout > snakeoil.pub

openssl dgst -sha256  -verify  snakeoil.pub -signature some-file.sha256 some-file

# in case of success: prints "Verified OK"
# in case of failure: prints "Verification Failure", return code 1

# or compact (requires a modern shell)
openssl dgst -sha256  \
    -verify  <(openssl x509 -in snakeoil.crt -pubkey -noout) \
    -signature some-file.sha256 some-file

答案 1 :(得分:42)

是的,OpenSSL的dgstrsautl组件可用于计算给定RSA密钥对的签名。

签名:

openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature

仅验证签名:

openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in signature

更新:从下面捕获Reto的评论,因为这是一个重要的细微差别。大概如果你要麻烦进行验证,你想知道签名是在它附加的明文上产生的:

对于某些人来说这听起来很明显但是:请注意,rsault verify只是解密文件signature。该调用的输出保证由私钥的所有者产生,但除此之外没有其他任何东西被检查。因此,要实际验证data.txt的一致性,您必须重新生成摘要,然后将其与openssl rsautl -verify的输出进行比较。

验证私钥的所有者是否为data.txt保证:

openssl dgst -sha256 -verify publickey.pem -signature signature data.txt

对于此操作, openssl 需要公钥,签名和消息。

答案 2 :(得分:5)

要在openssl中以数字方式签名文档,它将起作用

首先,您的证书应该受到信任 它看起来像这样

-----BEGIN TRUSTED CERTIFICATE-----
MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
...
-----END TRUSTED CERTIFICATE-----

然后使用以下命令

smime -sign -signer certificate.pem -inkey private.key -in test.txt \
    -out test1.txt -from ashish -to singhal