有没有办法使用 openssl 对 x509 证书或任何文档进行数字签名?
问问题
96561 次
3 回答
76
生成私钥
openssl genrsa -out privatekey.pem 2048
签署
openssl dgst -sha256 -sign privatekey.pem -out data.txt.signature data.txt
生成公钥
dgst -verify
需要公钥
openssl rsa -in privatekey.pem -outform PEM -pubout -out publickey.pem
核实
openssl dgst -sha256 -verify publickey.pem -signature data.txt.signature data.txt
- 如果成功:打印
"Verified OK"
,返回码0
- 如果失败:打印
"Verification Failure"
,返回码1
于 2013-08-21T14:09:41.290 回答
59
是的,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 的评论,因为这是一个重要的细微差别。大概如果您要麻烦进行验证,您想知道签名是在它所附加的明文上生成的:
这对某些人来说可能听起来很明显,但是:注意,rsautl verify
只是解密文件signature
。此调用的输出保证由私钥的所有者生成,但除此之外没有任何其他检查。因此,要真正验证一致性,data.txt
您必须重新生成摘要,然后将其与openssl rsautl -verify
.
验证私钥的所有者确实保证data.txt
:
openssl dgst -sha256 -verify publickey.pem -signature signature data.txt
对于此操作,openssl需要公钥、签名和消息。
于 2012-05-28T10:21:45.927 回答
8
要在 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
于 2014-02-05T08:54:16.790 回答