PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

PDF 内の証明書の有効期限を表示

Q.PDF 内の証明書の有効期限を取得できる製品はありますか?

A.PDFlib 製品で PDF 内の証明書の有効期限等を取得できる製品はありませんが、PLOP、PLOP DS に同梱されている pCOS コマンドラインツールと OpenSSL 等を組み合わせることで表示が可能です。

出力イメージ

下記の出力は simple_sig.pdf から pCOS コマンドラインツールで CMS (Cryptographic Message Syntax) オブジェクトを取り出し、OpenSSL で処理した結果です。このうち notAfter が証明書の有効期限にあたるため、この PDF で使用されている証明書は 2024年4月29日 (グリニッジ標準時) まで有効であることがわかります。


$ pcos --binary --verbose 0 --pcospath signaturefields[0]/V/Contents simple_sig.pdf | openssl cms -inform DER -cmsout -print
CMS_ContentInfo: 
  contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
  d.signedData: 
    version: 1
    digestAlgorithms:
        algorithm: sha256 (2.16.840.1.101.3.4.2.1)
        parameter: <ABSENT>
    encapContentInfo: 
      eContentType: pkcs7-data (1.2.840.113549.1.7.1)
      eContent: <ABSENT>
    certificates:
      d.certificate: 
        cert_info: 
          version: 2
          serialNumber: 1
          signature: 
            algorithm: sha256WithRSAEncryption (1.2.840.113549.1.1.11)
            parameter: NULL
          issuer: C=DE, L=Munich, O=PDFlib GmbH, CN=PDFlib GmbH Demo CA G3
          validity: 
            notBefore: Mar 30 13:44:33 2020 GMT
            notAfter: Mar 29 13:44:33 2024 GMT
          subject: C=DE, L=Munich, O=PDFlib GmbH, CN=PLOP Demo Signer RSA-2048
          key: 
            algor: 
              algorithm: rsaEncryption (1.2.840.113549.1.1.1)
              parameter: NULL
... (以下省略)

処理手順

ここでは PLOP, PLOP DS に同梱されている pCOS コマンドラインツールを利用しています。PDF 内の証明書には pCOS の疑似オブジェクト signaturefields でアクセスすることができ、証明書の数だけ要素を持つ配列になっています。要素数は length 接頭辞で取得できます。


$ pcos --pcospath length:signaturefields simple_sig.pdf
PDFlib pCOS: PDF Information Retrieval Tool, 5.4, pCOS interface 12
(c) 2007-2020 PDFlib GmbH  www.pdflib.com  sales@pdflib.com
1
 

pCOS コマンドラインツールでは、実行時に上記のようにバージョンとコピーライトが表示されます。これらがパイプ処理の妨げになる場合、冒頭のコマンドの通り "--verbose 0" で表示を抑制できます。

signaturefields[n] では証明書名 (/Name) や署名日時 (/M) 等の情報にアクセスできますが、この中に証明書の有効期限の情報は含まれていません。証明書の情報は /V/Contents からアクセスできる CMS オブジェクト に含まれていますが、pCOS 自身はこれを解析する機能を持たないため、今回は一例として OpenSSL で解析しています。

PDF の CMS オブジェクトは ASN.1 DER 形式で符号化されているため、OpenSSL では "-inform DER" を指定する必要があります。出力のうち notBefore と notAfter の間が証明書の有効期限なので、PDF を再署名する場合は notAfter より前に行う必要があります。"openssl cms" で特定要素のみを表示することはできないため、notAfter だけを取得する場合はさらに grep にパイプする等の方法が必要になります。

(Jul 9, 2020 - )