首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字签名pdfs

数字签名pdfs
EN

Stack Overflow用户
提问于 2009-01-07 10:15:05
回答 1查看 1.7K关注 0票数 2

我的公司有一个web文档管理应用程序,我已经被分配到一种方法,以签署与用户数字证书pdf文件。

pdfs可以从几kb到100 kb以上,这是在互联网上,所以签名必须发生在web服务器。

为了做到这一点,我构建了一个activeX控件,它要求用户选择证书,然后使用WebClient.UploadData将证书作为字节数组上传到网页。

在网页上,当我试图签署pdf文件时,我得到一个错误“键不存在”。这对我来说并不奇怪,因为在我选择正确的证书之后,当我在https连接上直接使用证书时,我将提示输入密钥。这种情况不会发生在activeX身上。

我是这样从用户那里获得证书的:

代码语言:javascript
复制
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(); }
        }

如何让用户提供我丢失的密钥?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-01-07 12:17:56

您希望用户将他们证书的私钥上传到key服务器,这样它就可以签署PDF了?如果是这样的话,从安全的角度来看,这从根本上是被打破的。

我想你可能漏掉了那个公开证书!=私钥。(我们大多数人都是草率的,使用“证书”一词来指这两件事中的任何一件(或两者),所以这并不完全令人惊讶)。从内存中看,CryptoAPI只有一组选择的方法,这些方法将允许您访问密钥。其中必须有一个“导出为PFX”的方法,这样如果你真的真的想要的话,你就可以让你的设计工作起来,但是我不可能推荐这个。(向etc服务器发送私钥、破坏不可抵赖等风险)。

如果您真的必须在服务器上进行签名--我不太理解您的论点,签名不应该为上传添加太多数据,那么您可能应该考虑采用多层体系结构和密钥托管机制。这样你至少可以最小化一些安全问题(但你仍然会失去不可否认的.并引入其他风险。这里没有免费午餐)。

所以..。您可能需要考虑重新架构您的应用程序,以便在上传PDF文件之前,在客户端(在您的ActiveX控件中)进行PDF签名。我想您将需要一个第三方库来完成签名步骤,正如this SO thread中所讨论的那样。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/419830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档