【问题标题】:How to Sign PDF using USB Token in Web Application?如何在 Web 应用程序中使用 USB 令牌签署 PDF?
【发布时间】:2017-02-05 22:14:19
【问题描述】:

当用户使用 asp.net Web 应用程序的客户端机器中的 USB 令牌上传文件时,我想签署 PDF。

我正在关注之前的 SO 帖子 Sign PDF with iTextSharp 5.3.3 and USB token

效果很好,当我在本地发布到 Web 服务器时,它会出现 当前会话不是交互式的异常。

堆栈跟踪:

[InvalidOperationException:当前会话不是交互式的。]

System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW(CRYPTUI_SELECTCERTIFICATE_STRUCTW csc) +345679
System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromStore(SafeCertStoreHandle safeSourceStoreHandle,字符串标题,字符串消息,X509SelectionFlag selectionFlags, IntPtr hwndParent) +314
System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollectionHelper(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag selectionFlag, IntPtr hwndParent) +176
System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag selectionFlag) +17 test.WebForm1.Upload_Click(对象发送者, E:\manishtest\test\test\WebForm1.aspx.cs:74 中的 EventArgs e)
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +138
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument) +150 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +6047

我第一次做 PDF 的数字签名。请建议在上传时在 Web 应用程序中签署 PDF 的方法。

【问题讨论】:

    标签: c# asp.net pdf itext


    【解决方案1】:

    似乎是这条线导致了问题:

    System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollectionHelper(X509Certificate2Collection certificates, String title, String message, X509SelectionFlag selectionFlag, IntPtr hwndParent)

    这个shows UI 选择一个证书。所以你需要找到另一种方法来获得证书才能让它发挥作用。

    您可以尝试您引用的the code in an answer 使用证书文件而不是文件来选择证书。

    X509Certificate2 cert = new X509Certificate2("C:\\mycert.p12");
    

    编辑:正如@Bruno Lowagie 所评论的,通过 U 盘签名意味着它是由 U 盘上的软件完成的,而不是将私钥发送到任何地方。他的第二条评论更详细地说明了如何实现这一点。但是得到那个错误仍然是一样的。在服务器上运行的代码无法打开对话框来选择客户端系统上的证书。

    【讨论】:

    • 我不想通过提供路径来使用证书文件,我想使用用户插入系统的 USB 读取相同的文件。
    • 嗯,Manish,您的意思是最终用户已插入他的系统?嗯,那么你需要通过文件上传从他们的系统获取文件到服务器,然后在那里使用它。
    • 是的.. 完全正确。您的意思是说用户必须将证书上传到服务器,并且我应该从他们那里获取路径并签署 PDF。有没有其他方法,我可以在不上传到服务器的情况下读取 USB 证书?任何第三方 dll
    • 好吧,不,我不会将我的证书上传到任何网站来签署愚蠢的 PDF。好吧,也许 PDF 可能是一份出售我肾脏的合同,但仍然没有被建议。为什么没有一个小实用程序,用户可以在他们的系统上下载和签署 PDF 并上传或保留签名副本?
    • 是的!真的..你说的是我们计划做的最后一个选择。我试图看看它是否可能,这就是我试图这样做的原因。谢谢伙伴:)如果有的话请让我知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2023-03-30
    • 1970-01-01
    • 2015-04-08
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多