【问题标题】:OpenSSL signature verification and certificate usageOpenSSL 签名验证和证书使用
【发布时间】:2014-05-02 15:03:00
【问题描述】:

我正在使用 Bouncy Castle java 类 (1.5) 来生成加密/签名的 CMS 消息。这些将作为电子邮件附件发送。
收件人将在解密之前使用 Windows 上的 OpenSSL 命令行验证消息。 我遇到了一个令我惊讶的问题。 Bouncy Castle 似乎根本不关心签名证书上的“使用”设置。我正在测试的是客户端和服务器身份验证证书,这显然是不正确的。 但是,在验证时,OpenSSL 抱怨证书使用不当(这在验证时似乎很奇怪(迟到),但没关系) 我收到以下消息: 验证失败 24188:error:2E099064:CMSroutines:CMS_SIGNERINFO_VERIFY_CERT:certificate verify error:.\crypto\cms\cms_smime.c:304:Verify error:unsupported certificate purpose

如果我包含“-no_signer_cert_verify”选项,一切正常(在这种情况下我也不需要包含 CAfile)。 OpenSSL 文档似乎表明证书的使用不受尊重,除非您打开“-用途”。 所以,我很困惑为什么会出现使用问题,并且不想为了绕过它而放弃签名证书的路径验证。 (使用正确使用证书的明显解决方案听起来很棒,但是,相信我,在这种情况下,我可能并不总是能够强制这样做,因为并非这些交易所的所有各方都能够可靠地做到这一点)。 有什么想法吗?

【问题讨论】:

  • 如果您显示相关的 Bouncy Castle 代码,人们可能会帮助您解决一些问题。您可能应该将其分解为几个问题。在此处询问 Bouncy Castle 编程问题;并在 Super User 上询问 OpenSSL 命令的用法。
  • 已在另一块板上解决。必须使用“- purpose any”选项来强制接受证书而不使用“电子邮件签名”。这允许删除“-no_signer_cert_verify”所以我继续获得证书的路径验证

标签: openssl digital-signature bouncycastle x509


【解决方案1】:

但是,在验证时,OpenSSL 抱怨证书 用法不正确(这似乎很奇怪(迟到) 验证时间,但没关系)我收到以下消息: 验证失败 24188:error:2E099064:CMS 例程:CMS_SIGNERINFO_VERIFY_CERT:证书验证 错误:.\crypto\cms\cms_smime.c:304:验证错误:不支持 证书用途

这是因为 OpenSSL 仅认为 X.509v3 扩展的某些组合对于验证 CMS 结构是“有效的”:

  • 如果存在Key Usage 扩展名,那么它必须包含digitalSignature 位。
  • 如果存在Extended Key Usage 扩展,那么它必须包含email protection OID。

这就是 OpenSSL 处理扩展的方式;虽然有意义,但这些规则并非由任何标准强制执行。它们属于与证书相关的策略,OpenSSL 已选择此非平凡策略作为默认策略。 Here 是一些背景信息和示例代码。您可能希望检查您的情况下签名/验证必须遵守的政策。

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2018-03-09
    • 2017-03-24
    相关资源
    最近更新 更多