【问题标题】:Digitally sign MS Office (Word, Excel, etc..) and PDF files on the server在服务器上对 MS Office(Word、Excel 等)和 PDF 文件进行数字签名
【发布时间】:2017-09-13 12:33:29
【问题描述】:

我需要对存储在服务器上的 MS Office 和 PDF 文件进行数字签名。我的意思是根据每种特定的文件格式,集成在文档中的数字签名。

这是我想到的过程:

  1. 创建文件内容的哈希
  2. 将哈希发送到浏览器中自定义编写的 Java 小程序
  3. 用户使用他/她的私钥加密散列(例如通过 PKCS#11 在 USB 令牌上),从而有效地签署文件。
  4. 小程序然后将签名发送到服务器
  5. 然后我会在服务器上将签名合并到文件中(MS Office 和 PDF 文件可以在不更改文件内容的情况下做到这一点,可能只需设置一些元数据字段)

很酷的是,您无需再次下载完整文件并将其上传到服务器。更酷的是,客户不需要 Office 或 PDF Writer 来签署文件。

第 2、3 和 4 部分对我来说没问题,我的公司购买了我之前从事的项目所需的所有 JAVA 技术。

问题:我似乎找不到任何文档/示例来执行 Office 文件的第 1 部分和第 5 部分。这次我的谷歌技能是不是让我失望了?

对于 MS Office 文件,您是否有任何指向文档或示例的指针?底层技术对我来说不是那么重要:我可以使用 Java、.Net、COM,任何可用的技术都可以!

注意:我 95% 确定我可以使用 iText 确定 PDF 文件的第 1 点和第 5 点

谢谢

** 编辑:如果我不能用哈希来做到这一点并且必须将完整的文件下载到客户端,它也是可能的。但是我仍然需要文档才能在 Java 中签署 Office 文件……这次(来自小程序)

【问题讨论】:

  • 您有 95% 的把握...... 100% 的肯定,我们已经开发出一种解决方案,可以使用 iText 处理 PDF 文件
  • Carles : 你有产品链接吗?
  • 嗨,Sébastien,您找到解决问题的好方法了吗?我目前面临与您相同的挑战。如果您分享您的经验,我将不胜感激。提前谢谢,何塞
  • @José:抱歉,我暂时没有找到好的解决方案。 Carles 提出了一个解决方案,但我找不到产品,太糟糕了!你可以尝试联系他,看看你是否比我运气好 :-) 我正在做的项目暂时被推迟了,我只是在“研究”部分,所以我没有更努力。祝你好运

标签: java .net ms-office digital-signature


【解决方案1】:

一般来说,您可以使用我们的 SecureBlackbox 产品来签署 Office 和 PDF 文件。但是,像您的场景中那样的分布式签名并非易事(尽管可能)。我们目前正在开发 SecureBlackbox 的附加组件,以简化此类分布式操作。

更新:分布式签名功能现已可用,并在 this answer 中进行了详细描述。

【讨论】:

  • 感谢您的链接。我会调查的。
  • 问题;您的插件是否支持 PKCS#11 令牌进行签名(每个令牌没有特定配置:我必须支持大量不同的令牌:Gemplus、Oberthur、...)?
  • 实际上,现在可以使用存储在加密硬件上的证书和私钥进行签名(通过 CryptoAPI 或通过 PKCS#11 接口)。因此,现在工作中唯一缺少的部分是用于简化分布式签名的附加组件。
【解决方案2】:

我看到一个问题:一旦将签名合并到文件中,您就会立即更改它的哈希值。因此,如果您稍后通过签名来验证文件没有被更改,那么它肯定会失败。

【讨论】:

  • 我同意,但 PDF 和 Office 格式可以处理这个问题。这就是我认为的完成方式:每个文件都是一个信封,其中包含 PDF/Office 文件的实际内容 + 一些元数据。当您对文件进行签名时,您对内容进行了签名,然后将签名存储在元数据中。文件已更改,但内容未更改。然后,当 Acrobat 或 Office 打开文件时,它会检查内容和存储在元数据中的签名是否匹配。 PDF 文件的这种签名示例:itextpdf.sourceforge.net/howtosign.html#howtosign
  • 啊,所以你不想散列“文件”而是文件的“内容”,就像 word 文档中的文本一样......?
  • 对,但不仅是文字,还有图片和所有内容......我会尽量让我原来的问题更清楚一点
【解决方案3】:

你不应该自己发明签名。您可以将文件转换为 XML 并使用 XMLDSIG (JSR 105),它包含在 Java 6 中。

http://java.sun.com/javase/7/docs/technotes/guides/security/xmldsig/overview.html

如果您可以使用 docx 等 Open Office 文件格式,则它已经是 XML,因此您只需添加签名即可。

【讨论】:

  • 这里没有什么可发明的——所有办公文件格式(旧的 MS Office、OOXML 和 OpenOffice ODF)都支持签名,PDF 规范也是如此。一切都有记录和标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2015-03-21
  • 1970-01-01
相关资源
最近更新 更多