通过使用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"和签名时间)。
怎么做?
答案 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中创建的符号的文件,以找出正确的字节数组。