将签名添加到PDF

时间:2020-06-04 14:10:59

标签: xml pdf digital-signature

我知道有关此主题的话题已经很多,但我确实找不到我想要的东西。

我国有一项服务,该服务使用电话号码和密码为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>

0 个答案:

没有答案