使用 OpenSSL 验证 S/MIME 签名的消息而不检查证书的用途

使用 OpenSSL 验证 S/MIME 签名的消息而不检查证书的用途

问题:

当我使用用于 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 版本上测试了它,效果很好。

相关内容