簡體   English   中英

通過ITextSharp進行PDF客戶端簽名

[英]Pdf client side signing via ITextSharp

我想通過iTextSharp模擬客戶端簽名。

我有有效的證書,這些證書已導出到2個文件中-.cer文件(公共密鑰)和.pfx文件(帶有私鑰),pfx文件用作密鑰庫。 在“服務器”上使用的公鑰。

我也有一個pdf文件-例如https://yadi.sk/i/6vuDlEPXi7oYz 我的代碼復制在以下要點中: https : //gist.github.com/alex-t0/f446ccb5ca5e8936b778

概括地說,有3種方法:

  • ServerSidePrepare(准備哈希,使用公共密鑰)
  • ClientSideSign(通過私鑰簽名)
  • SaveSignedDocumentOnServer(將簽名合並到服務器上的pdf中)。

但是此代碼會生成pdf文檔,該簽名無效。 使用pdf中的方法MakeSignature.SignDetached簽名有效時,一切正常。

如何調試並發現問題? 還是pdf客戶端簽名的其他示例? 與服務器部分,在C#中。

您在GetEncodedPKCS7調用中使用了錯誤的摘要。

當您第一次(正確)構建經過身份驗證的屬性時

sgn.getAuthenticatedAttributeBytes(messageHash, now, null, null, CryptoStandard.CMS)

但是稍后在實際構建PKCS7簽名容器時,您會

result.Sign.GetEncodedPKCS7(result.Hash, result.Now, null, null, null, CryptoStandard.CMS);

這兩個調用的參數必須相同(但后一個調用中的其他ITSAClient參數除外)。 否則,最終的認證屬性(建於GetEncodedPKCS7 )是從原有的(建於不同getAuthenticatedAttributeBytes ),將需要一個不同的簽名值。

因此,您應該在DTO中包含byte[] messageHash SaveSignedDocumentOnServer並在SaveSignedDocumentOnServer使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM