【问题标题】:Add optional OID in CMS/PKCS 7 signature in C# and Compact Framework 3.5在 C# 和 Compact Framework 3.5 的 CMS/PKCS 7 签名中添加可选 OID
【发布时间】:2014-12-10 11:13:52
【问题描述】:

通过使用 CAPI 函数(在 C# 和 Compact Framework 3.5 中),我尝试签署一个 XML 并创建一个 CMS/PKCS 信封,就像下面的 OpenSSL 命令一样:

openssl smime -sign -in file.xml -out file.b64 -passin pass:test -binary -nodetach -inkey cert.priv.pem -signer cert.pub.pem

通过调用函数“CryptMsgOpenToEncode”和“CryptMsgUpdate”,我获得了第一个签名文件。现在我将添加可选的 OID 和其他数据(更准确地说是“SMIMECapabilities”和签名时间)。

如何做到这一点?

【问题讨论】:

    标签: c# cryptography openssl compact-framework


    【解决方案1】:

    我也有类似的问题。我找到了这篇文章,建议在哪里使用 Certificate Enrollment API。

    Bouncy Castle 还能够编写 SMIMECapabilities。

    更新: 原链接内容: 据我所知,.NET 中不支持 SMIMECapabilities 属性,为了触摸这个属性,证书注册 API 中的 IX509CertificateRequestPkcs10::SmimeCapabilities 似乎支持它,你可以检查一下:

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa377586(v=vs.85).aspx

    附加信息: 经过一些研究,我能够使用 CmsSigner 编写 SMIMECapabilities(我正在创建处于分离状态的签名文档)。 我用这个代码。

    signer.SignedAttributes.Add(new AsnEncodedData("1.2.840.113549.1.9.15",  new byte[]{...})
    

    不幸的是,CmsSigner 只能将 SMIMECapabilities 的内容写入字节数组。我使用此工具https://lapo.it/asn1js/ 解码带有在 openssl 中创建的符号的文件,以找出正确的字节数组。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多