在 C# 和精简框架 3.5 中的 CMS/PKCS 7 签名中添加可选的 OID

本文关键字:添加 OID PKCS 框架 CMS 中的 | 更新日期: 2023-09-27 18:33:58

通过使用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 和其他数据(更准确地说是"SMIMECapability"和签名时间)。

怎么做?

在 C# 和精简框架 3.5 中的 CMS/PKCS 7 签名中添加可选的 OID

我也有类似的问题。我找到了这篇文章,建议使用证书注册API。

Bouncy Castle也能够编写SMIMECapability。

更新:原始链接的内容:据我所知,.NET 中不支持 SMIMECapability 属性,对于接触此属性,证书注册 API 中的 IX509CertificateRequestPkcs10::SmimeCapabilities 似乎支持它,您可以检查一下:

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

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

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

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