有没有办法使用openssl对x509证书或任何文档进行数字签名?
答案 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的dgst和rsautl组件可用于计算给定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