我的公司有一個網絡文檔管理應用程序,我已被分配到找到一種方法來簽署用戶數字證書的PDF文件。Digitally sign pdfs
PDF文件可以從幾KB去到100MB,這是在互聯網上,從而在Web服務器簽名必須發生。
爲了做到這一點,我構建了一個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(); }
}
我怎麼能要求用戶提供我丟失的鑰匙嗎?
以前的版本在客戶端使用pdf簽名。當您想要簽署100Mb文件時,這是一個問題,因爲您必須通過網絡上傳文件。試想一下,如果不上15kb /秒的上傳連接,它會怎樣? – Sergio 2009-01-07 12:23:30