【发布时间】:2016-09-13 21:17:00
【问题描述】:
我想创建一个 Web 应用程序,其中服务器创建一个 pdf 文档,然后用户使用一些个人数字证书(eID、身份证、nif 等)对其进行签名
问题是,当我在本地尝试(调试)时它可以工作,因为我在本地机器上安装了证书,但是当我发布时,证书的私钥不在证书中,所以,我可以不要在 pdf 上签名。
public ActionResult Index()
{
HttpClientCertificate cert = Request.ClientCertificate;
X509Certificate2 x509cert2 = new X509Certificate2(cert.Certificate);
}
在Debug中,所以,在本地机器x509cert2.PrivateKey不为空,但如果我发布,x509cert2.PrivateKey为空,所以,当我尝试时:
byte[] contentPdfUnsigned = System.IO.File.ReadAllBytes(path + name + ".pdf");
ContentInfo objContent = new ContentInfo(contentPdfUnsigned);
SignedCms objSignedData = new SignedCms(objContent);
CmsSigner objSigner = new CmsSigner(x509cert2);
objSignedData.ComputeSignature(objSigner, false);
byte[] bytSigned = objSignedData.Encode();
在“objSignedData.ComputeSignature(objSigner, false);”行中抛出异常:
System.Security.Cryptography.CryptographicException:密钥不存在。
有什么方法可以让用户把私钥传给我吗?
本地执行时 x509cert2.PrivateKey.ToXMLString(true);
提示此消息:
英文:
有没有办法提示此消息(或其他消息)以允许用户传递私钥?
【问题讨论】:
标签: asp.net-mvc digital-signature x509certificate digital-certificate