我想在用户使用USB令牌上传文件时签名PDF,该令牌位于asp.net Web应用程序的客户端计算机中。
我之前关注的是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,String title,String message,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(Object sender, EventArgs e)在E:\ manishtest \ test \ test \ WebForm1.aspx.cs:74
System.Web.UI.WebControls.Button.OnClick(EventArgs e)+138
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+150 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 6047
我第一次做PDF的数字签名。请建议在上传时在Web应用程序中签署PDF的方式是什么。
答案 0 :(得分:2)
似乎这一行造成了问题:
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
所评论的那样,通过USB记忆棒进行签名意味着它由棒上的软件完成,而不是在任何地方发送私钥。他的第二条评论更详细地阐述了如何实现这一目标。但是得到这个错误仍然是一样的。在服务器上运行的代码无法打开对话框以在客户端系统上选择证书。