如何使用x.509签名/证书对PDF进行签名

时间:2017-06-25 19:40:25

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

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

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

我发现page提到了几个工具,但似乎所有工具都已过时,或者我只是愚蠢地让它们起作用。

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

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

是否有任何命令行工具可以签署PDF?

非常感谢你们!

5 个答案:

答案 0 :(得分:8)

似乎PortableSigner做了工作。 enter image description here

如果您担心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>

答案 1 :(得分:1)

您可以在此处编写自己的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
});

答案 2 :(得分:1)

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

请参阅the openSSL man page for x509

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

答案 3 :(得分:0)

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

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

您可以参考以下链接获取相同

的详细信息

http://portablesigner.sourceforge.net/

答案 4 :(得分:0)

正如其他人所提到的,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是证书的公钥(不是证书本身)。