我需要生成一个 PKCS#7/CMS 分离签名,我知道我可以很容易地做到这一点:
byte[] data = GetBytesFromFile(cheminFichier);
X509Certificate2 certificate = null;
X509Store my = new X509Store(StoreName.My,StoreLocation.CurrentUser);
my.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certColl = X509Certificate2UI.SelectFromCollection(my.Certificates, "Test" , "Choose a certificate" , X509SelectionFlag.SingleSelection);
certificate = certColl[0];
if (certificate == null) throw new Exception("No certificates found.");
//byte [] pfxFile = certificate.Export(X509ContentType.Pfx);
//X509Certificate2 certPfx = new X509Certificate2(pfxFile);
ContentInfo content = new ContentInfo(new Oid("1.2.840.113549.1.7.1"),data);
SignedCms signedCms = new SignedCms(content, true);
CmsSigner signer = new CmsSigner(certificate);
signer.DigestAlgorithm = new Oid("SHA1"); // sha1
// create the signature
signedCms.ComputeSignature(signer);
return signedCms.Encode();
但!此应用程序的用户使用强私钥保护导入他们的证书。我找到了一些关于这方面的信息,有人说这种类型的案例在 .NET 框架中无法工作,这让我感到惊讶。我想知道是否有人有解决方法,或者对此有解决方案。
基本上,我的用户给我一个文件名(PDF 或 RTF),然后我在我的商店中搜索他们的证书,我使用与之关联的私钥来生成签名。我希望此时用户被要求输入他的私钥密码,这样应用程序就不会收到密码。