在C#和Compact Framework 3.5中的CMS / PKCS 7签名中添加可选OID

时间:2014-12-10 11:13:53

标签: c# cryptography openssl compact-framework

通过使用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"和签名时间)。

怎么做?

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我发现这篇文章,推荐使用证书注册API。

Bouncy Castle也有能力编写SMIMECapability。

更新: 原始链接的内容: 据我所知,.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中创建的符号的文件,以找出正确的字节数组。