openssl 验证签名

信息安全 tls 公钥基础设施 openssl 电子签名
2021-08-20 22:29:13

对于 S/MIME,我现在知道我可以通过以下方式验证 PKCS#7 分离签名:

openssl smime -verify -in detachedsign.pem -content content.txt

但是非 MIME 消息呢?
因此,如果我Hello, World!openssl smime -sign -text....它签署消息实际上将签署

Content-Type: plain/text

Hello, World!

是否可以使用openssl对普通文本文件进行签名(原样)?-sign输出 PKCS#7 分离签名并-verify接受 PKCS#7 分离签名和内容

2个回答

是的,您可以使用 OpenSSL 创建和签署纯文本文件的消息摘要,然后使用该签名摘要来确认文本的有效性。

openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

然后使用验证短信的有效性

openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

查看 O'Reilly 的《使用 OpenSSL的网络安全》一书,以获得这些功能的良好文档来源。上面的例子来自那本书。

根据qistoph 的博客(以及 dave_thompson_085 的评论),签署消息

openssl smime -sign -nodetach -inkey keyfile.key -signer cert.cer -in unsigned.txt -inform pem -out signed.p7m

unsigned.txt要签名的文件在哪里;keyfile.key是 PKCS#8 私钥(未加密);cert.cer是 X.509 证书。signed.p7s将是附加的 PKCS#7 签名,这意味着有效负载 ( unsigned.txt) 包含在签名中。要获得分离的签名,请删除标志(并根据标准-nodetach以扩展名命名输出文件)。.p7s

要验证签名:

openssl smime -verify -in signed.p7 -inform pem

如果证书本身不需要验证(例如,当它没有由公共 CA 签名时),请添加一个-noverify标志。-noverify仅禁用证书验证;有效载荷签名仍在验证中。