在 PDF 中添加签名

问题描述 投票:0回答:1

我知道已经有很多关于这个主题的不同主题,但我真的找不到我要找的东西。

我的国家有一项服务,可以使用电话号码和密码为 PDF 提供数字签名(您必须注册此服务)。不管怎样,有一个WebService——它的文档非常少——而且我能够使用这个服务。使用我的电话号码和密码发送请求后,我会收到数字签名的响应。

但问题是我没有收到签名的 PDF,我只收到原始 PDF、X.509 证书和摘要等。

我的问题是,如何将摘要和证书添加到PDF中,以便普通PDF阅读器可以识别签名?

以下是数字签名服务如何工作的简短描述:

  1. 我将要签名的PDF转换为base64
  2. 我使用我的电话号码和密码进行身份验证
  3. 服务返回未签名 PDF 以及 X.509 证书和摘要
  4. 我需要亲自签署 PDF

我卡在第 4 步了。

这是使用测试 PDF 的示例请求的

XMLResposne
(摘要和证书被剪掉):

<?xml version="1.0" encoding="UTF-8"?>
<sl:CreateXMLSignatureResponse xmlns:sl="...">
   <dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="signature-1-1">
      <dsig:SignedInfo>
         <dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
         <dsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256" />
         <dsig:Reference Id="reference-1-1" URI="#signed-data-1-1">
            <dsig:Transforms>
               <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
                  <xpf:XPath xmlns:xpf="http://www.w3.org/2002/06/xmldsig-filter2" Filter="intersect">id('signed-data-1-1')/node()</xpf:XPath>
               </dsig:Transform>
               <dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64" />
            </dsig:Transforms>
            <dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
            <dsig:DigestValue>[some digest]</dsig:DigestValue>
         </dsig:Reference>
         <dsig:Reference Id="etsi-data-reference-1-1" Type="http://uri.etsi.org/01903#SignedProperties" URI="#etsi-signedproperties-1-1">
            <dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
            <dsig:DigestValue>[some digest]</dsig:DigestValue>
         </dsig:Reference>
      </dsig:SignedInfo>
      <dsig:SignatureValue Id="signaturevalue-1-1">[some base64 value]</dsig:SignatureValue>
      <dsig:KeyInfo>
         <dsig:X509Data>
            <dsig:X509Certificate>[some base64 value]</dsig:X509Certificate>
         </dsig:X509Data>
      </dsig:KeyInfo>
      <dsig:Object Id="signed-data-1-1">[the original PDF as base64, not signed]</dsig:Object>
      <dsig:Object Id="etsi-signed-1-1">
         <etsi:QualifyingProperties xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#" Target="#signature-1-1">
            <etsi:SignedProperties Id="etsi-signedproperties-1-1">
               <etsi:SignedSignatureProperties>
                  <etsi:SigningTime>2020-06-04T14:00:22Z</etsi:SigningTime>
                  <etsi:SigningCertificate>
                     <etsi:Cert>
                        <etsi:CertDigest>
                           <dsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
                           <dsig:DigestValue>[some digest]</dsig:DigestValue>
                        </etsi:CertDigest>
                        <etsi:IssuerSerial>
                           <dsig:X509IssuerName>[issuer name]</dsig:X509IssuerName>
                           <dsig:X509SerialNumber>[serial no]</dsig:X509SerialNumber>
                        </etsi:IssuerSerial>
                     </etsi:Cert>
                  </etsi:SigningCertificate>
                  <etsi:SignaturePolicyIdentifier>
                     <etsi:SignaturePolicyImplied />
                  </etsi:SignaturePolicyIdentifier>
               </etsi:SignedSignatureProperties>
               <etsi:SignedDataObjectProperties>
                  <etsi:DataObjectFormat ObjectReference="#reference-1-1">
                     <etsi:MimeType>application/pdf</etsi:MimeType>
                  </etsi:DataObjectFormat>
               </etsi:SignedDataObjectProperties>
            </etsi:SignedProperties>
         </etsi:QualifyingProperties>
      </dsig:Object>
   </dsig:Signature>
</sl:CreateXMLSignatureResponse>
xml pdf digital-signature
1个回答
0
投票

我构建了一个这样的工具来使用特定的 X.509 认证对 PDF 进行签名。 顺便说一句,您不必每次都申请 X.509 认证。您可以自己生成。

步骤如下:

  1. 安装

    openssl
    python3
    pip

  2. 在控制台中运行命令:

    pip install pyhanko[opentype]

  3. https://github.com/Micraow/pdf_signer 下载代码或将

    stamp.py
    保存到您的计算机。 文件开头附近有一些字段。改变它们。

  4. 奔跑

    python stamp.py

关于如何生成自己的认证等信息,请阅读此:https://pengs.top/pdf-sign/

© www.soinside.com 2019 - 2024. All rights reserved.