【发布时间】:2010-09-30 00:12:21
【问题描述】:
我的公司有一个 Web 文档管理应用程序,我被指派寻找一种使用用户数字证书签署 pdf 文件的方法。
pdf 可以从几 kb 到超过 100Mb,这是通过 Internet 进行的,因此签名必须在网络服务器上进行。
为了做到这一点,我构建了一个 activeX 控件,它要求用户选择证书,然后使用 WebClient.UploadData 将其上传到网页,将证书作为字节数组发送。
在网页上,当我尝试签署 pdf 文档时,我收到一个错误“密钥不存在”。这对我来说并不奇怪,因为当我在选择正确的证书后直接通过 https 连接使用证书时,我会提示输入密钥。 activeX 不会发生这种情况。
这就是我从用户那里获取证书的方式:
private static X509Certificate2 PickCertificate()
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly);
// pick a certificate from the store
X509Certificate2 cert = X509Certificate2UI.SelectFromCollection(store.Certificates, "Title", "Message", X509SelectionFlag.SingleSelection)[0];
// show certificate details dialog
X509Certificate2UI.DisplayCertificate(cert);
store.Close();
return cert;
}
finally { store.Close(); }
}
如何要求用户提供我丢失的密钥?
【问题讨论】:
-
现代浏览器不支持 java applet 或 activeX 解决方案。使用任何或可用的浏览器扩展进行数字签名。 Signer.Digital Chrome 扩展程序就是这样一款免费的扩展程序。请参考答案stackoverflow.com/a/55676351/9659885
-
是的...这是一个 10 年前的问题...
-
嗯......是的,这就是原因,我根据新的发展和背景添加了这个评论......(为了获得一些支持......!:P)
标签: digital-signature digital-certificate