【问题标题】:How to sign PDF with a x.509 signature/certificate如何使用 x.509 签名/证书签署 PDF
【发布时间】:2017-11-28 17:08:54
【问题描述】:

tl;dr: 我正在寻找一个可以输入 x.509 文件和输入 PDF 并输出签名 PDF 的 CLI 工具。 NodeJS 的最佳方案

你好。我有点沮丧。我正在寻找一种可以使用命令行对 PDF 文件进行签名的工具。我确实使用了一个名为 handy-signatur.at(来自 www.a-trust.at 的服务)的在线服务,它生成 x.509 证书。

我找到了一个page,其中提到了几个工具,但似乎所有工具都已过时。

我特别尝试了 PortableSigner,但它需要 Java 6,我无法让它在 Ubuntu(服务器和桌面版)17.04 上运行。

/edit:我无法让 PortableSigner 工作,因为 Java 6 和 7 不再可用,甚至可能不安全使用。

是否有任何用于签署 PDF 的命令行工具?

非常感谢你们!

【问题讨论】:

  • 我发现了这个:gist.github.com/chrpinedo/a2a2af757e96aec0d6f69d707629a01a 如果这种方法适用于您的情况,那么您可以使用 pdftk 创建一个 Node.js 脚本来做同样的事情。
  • 遗憾的是我没有签名图像,但有 x509 证书
  • 哦,看起来不错!我不知道为什么我没有找到:D 谢谢。如果你愿意,你可以写一个答案,我一试就接受!
  • 好的,等等,这似乎只是 PortableSigner 的一个包装,我不知道如何使它工作

标签: java node.js pdf digital-signature x509certificate


【解决方案1】:

似乎PortableSigner 完成了这项工作。

如果您担心 Java 7 支持。用 Java 8 试试,可能数字签名功能仍然有效,因为 7 和 8 之间没有任何重要变化

或者,使用 PDFBox 或 itext 等库使用 Java 实现签名程序相对容易。在这里,您有一个完整的 pdfbox 示例。请注意,它有一个main

https://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateSignature.java

用法:

java org.apache.pdfbox.examples.signature.CreateSignature 
     <pkcs12_keystore> <password> <pdf_to_sign>

【讨论】:

  • 你是如何让它与 Java 8 一起工作的?我一直收到关于未安装某些模块的错误,即使我安装了。
  • 我没有在Java 8中尝试过。我只是说Java 7和8之间的数字签名功能没有改变,所以PortableSigner应该可以工作。我也认为您可以安全地使用 java 7。我不知道未来的 JVM 漏洞(出现的可能性很小,因为它是一个非常成熟的功能)会如何影响通过命令行启动的程序。请注意,您正在生成一个数字签名文件,该文件可以仅使用公钥进行外部验证
【解决方案2】:

您可以编写自己的 Java 脚本,这里是参考 http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/AcrobatDC_js_api_reference.pdf

var myEngine = security.getHandler( "Adobe.PPKLite" );
myEngine.login( "password", "/C/Users/username/Desktop/PrivateUser.pfx" );
var myInfo = {password: "password",
 reason: "SaveAs Test",
 mdp: "defaultAndComments"};
this.certifyInvisibleSign({
 oSig:myEngine,
 oInfo:myInfo,
 cDIPath:"/c/temp/sigSign.pdf",
 cLegalAttest: "Certified using JavaScript",
 bUI:false
});

【讨论】:

    【解决方案3】:

    据我所知,openSSL 是唯一维护的工具,它可能支持输入 x.509 文件和 PDF 以生成签名的 PDF 文件。

    the openSSL man page for x509

    我还找到了一个 PortableSigner2 项目,但它也不是最新的。

    【讨论】:

      【解决方案4】:

      PortableSigner 是一种使用 X.509 证书对 PDF 进行数字签名的工具。

      这是一个 Java 应用程序,因此需要安装兼容的 JRE(根据网站:1.6 和 1.7)。

      您可以参考以下链接以获取相同的详细信息

      http://portablesigner.sourceforge.net/

      【讨论】:

        【解决方案5】:

        正如其他人所提到的,openssl 命令可以做到这一点,但我花了一段时间才找到一个例子。 这是一个很好的例子的网站:

        https://raymii.org/s/tutorials/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.html

        以及链接失效时的命令:

        To sign:
        
        openssl dgst -sha256 -sign mycert.key -out sign.txt.sha256 sign.txt
        

        其中 mycert.key 是您的 x509 证书的私钥。

        To verify:
        
        openssl dgst -sha256 -verify  mycert.pub -signature sign.txt.sha256 sign.txt
        

        其中 mycert.pub 是证书的公钥(不是证书本身)。

        【讨论】:

        • 它可能没有明确说明,但问题是关于集成的 PDF 签名,而不是分离的签名。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 2014-09-15
        • 2011-02-24
        • 1970-01-01
        • 2017-06-05
        相关资源
        最近更新 更多