gpt4 book ai didi

openssl - 为什么 OpenSSL PKCS7_verify() 需要 "smimesign"证书用途?

转载 作者:行者123 更新时间:2023-12-02 18:34:50 25 4
gpt4 key购买 nike

PKCS7_verify() 的手册页指出

...每个签名者的证书都使用 smimesign 目的进行链验证...

为什么总是需要这一目的?据我了解,签名的 PKCS7 结构可用于许多用途,S/MIME 只是其中之一。

如果我的签名证书的 extendedKeyUsage 扩展中没有 smimeSign,则 PKCS7_verify() 会失败。我需要手动调整目的才能进行验证。我在这里遗漏了什么吗?

最佳答案

仅仅验证签名、检查签名者的证书是否真实以及链是否通向受信任的根是不够的。任何验证码还必须确保证书持有者有权为特定目的执行签名。获得具有 smimeSign 权限的证书的审查比代码签名证书的审查要宽松得多。

想象一家软件开发公司,每个员工都获得了用于电子邮件签名和加密的证书。该公司还发布了一款软件产品,并提供了其产品的PKCS#7签名分发包。如果 PKCS#7 验证功能没有检查签名证书的目的(在这种情况下,我们需要协同设计),公司员工中的不良行为者可能会创建该软件的受损版本产品,并使用他们的电子邮件证书对其进行签名(其唯一目的是smimesign。)

就 OpenSSL 的 pkcs7_verify() 而言,API 的设计目的是暗示一种目的,而不是明确要求传入一个目的,并且选择 smimeSign 作为默认值。我猜测,由于 S/MIME 是 PKCS#7 最常见的用途,因此它是有意义的,并且它允许人们在大多数用例中验证 PKCS#7,而无需了解 extendedKeyUsage

[在我的原始答案下方,解决您的预编辑问题“我可以指定我想要针对其他目的验证 PKCS7 中的签名吗”:]

证书可以包含称为“扩展 key 用法”的(可选)属性。该属性用于指示允许使用证书的用途。一些可能的 X509.v3 用法是:

  • 服务器身份验证
  • 客户端身份验证
  • 代码签名
  • 电子邮件保护
  • ipSecEndSystem
  • ipSecTunnel
  • 时间戳
  • ocsp签名
  • 智能卡登录
  • pkiPeerAuth

您可以查看 x509v3_config openssl 知道的 key 使用标志的手册页。

PKCS#7 是一种通用容器格式,允许对容器内容进行签名和/或加密。 S/MIME 使用 PKCS#7 来签名和/或加密电子邮件,在这种情况下,所使用的证书应具有 emailProtection 用法。

如果您想分发一些代码,并且希望确保接收者可以验证分发是否来自您且未更改,您可以使用 PKCS#7 进行分发,在这种情况下,您的证书应该具有codeSigning 增强的 key 使用属性。一个证书可以有多种 key 用途,但一般来说,针对不同的使用类型使用单独的 key (以及证书)是一个好主意。

Openssl 在命令行上支持使用“openssl smime”命令时指定证书的所需用途。例如,

    openssl smime -verify -in myfile.p7b -inform DER -out my-p7-content -purpose any

将验证文件“my file.p7p”中的签名,它将把 PKCS#7 容器的内容写入文件“my-p7-content”中,并且它将接受任何有效的证书,无论其指示是什么目的是。 (-任何目的)。请注意,smime 的 openssl 手册页并未将 - Purpose 开关列为选项,但它确实受支持。

由于您以编程方式引用了 PKCS7_verify API 文档,因此您可以通过X509_VERIFY_PARAM_set_purpose指定目的。设置 X509_STORE 对象时的方法。以下片段应该可以让您了解该过程:

X509_STORE store;
int purpose;

store = X509_STORE_new();
verify_params = X509_Store_get0_param(store);
purpose = X509_PURPOSE_get_by_sname("sslclient");
X509_VERIFY_PARAM_set_purpose(verify_params, purpose)
...
PKCS7_verify(..., store, ...);

这将在验证时将目的设置为 SSL 客户端。

关于openssl - 为什么 OpenSSL PKCS7_verify() 需要 "smimesign"证书用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40685111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com