使用预先计算的签名在 C# 中创建 PKCS#7 签名消息

Create a PKCS#7 signed message in c# with a precomputed signature

我正在尝试在 C# 中创建 PKCS#7 签名邮件。数字签名在 HSM 中单独计算,所以我已经有了签名的值,我只想创建一个包含它的 PKCS#7 结构。

我研究过在 System.Security.Cryptography.Pkcs 命名空间中使用 SignedCms,但这似乎没有提供预计算签名的选项。

当我已经有了数字签名的值时,在 C# 中生成 PKCS#7 结构的最佳方法是什么?

我想你想要的是 X509Certificate2 class,使用静态 CreateFromSignedFile 函数从签名文件中检索证书,或者使用 CreateFromCertFile 创建来自指定的认证文件:

X509Certificate2 cert = X509Certificate2.CreateFromSignedFile(filename);
CmsSigner signer = new CmsSigner(cert);

据我所知,您不能使用 "built-in" .NET 类.

但是我创建了一个示例应用程序 - Pkcs7SignatureGenerator - for CMS signature creation with Pkcs11Interop (which I am author of) and Bouncy Castle 库。

在此应用程序中,Pkcs11Interop 库通过 PKCS#11 API 使用存储在硬件设备中的私钥执行签名操作,BouncyCastle 库负责构建 CMS (PKCS#7) 签名结构。