![使用 OpenSSL 验证 S/MIME 签名的消息而不检查证书的用途](https://linux22.com/image/670210/%E4%BD%BF%E7%94%A8%20OpenSSL%20%E9%AA%8C%E8%AF%81%20S%2FMIME%20%E7%AD%BE%E5%90%8D%E7%9A%84%E6%B6%88%E6%81%AF%E8%80%8C%E4%B8%8D%E6%A3%80%E6%9F%A5%E8%AF%81%E4%B9%A6%E7%9A%84%E7%94%A8%E9%80%94.png)
问题:
当我使用用于 HTTPS 网络服务器的证书签署消息时,OpenSSL 不想对其进行验证。
签名信息:
回显“TestMessage”| openssl smime \ -符号 \ -inkey 服务器密钥.pem \ -签名服务器-crt.pem \ -certfile 服务器-crt.pem \ -noattr -nodetach \ -输出 DER \ -输出签名消息.dat
验证消息:
openssl smime \ -核实 \ -在signedmessage.dat \ -通知 DER \ -签名服务器-crt.pem \ -CA文件 ca-crt.pem \ 验证失败 34379118248:错误:21075075:PKCS7 例程:PKCS7_verify:证书验证错误:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/pkcs7/pk7_smime.c:342:验证错误:不支持的证书目的
现在,我知道我应该使用允许此目的的证书签署我的消息。
但是有没有什么办法可以绕过检查并验证签名呢?
CA 和证书的创建方式如下:
CA 创建:
openssl req -x509 -new -newkey rsa:4096 -keyout ca-key.pem -out ca-crt.pem
证书创建:
openssl req -new -newkey rsa:4096 -keyout server-key.pem -out server-csr.pem -nodes
openssl ca -config openssl.cnf -extensions server -cert ca-crt.pem -keyfile ca-key.pem -in server-csr.pem -out server-crt.pem
openssl.cnf中的扩展定义:
[ 服务器 ] 扩展密钥使用情况 = 服务器验证 密钥用法 = 数字签名,密钥加密 ...
答案1
Openssl smime 在验证模式下将-purpose
选项传递给 openssl verify 的调用。因此,您应该能够添加-purpose sslserver
并验证它。我在 1.0.2d 版本上测试了它,效果很好。