首页 > 解决方案 > 如何在 iTextSharp 5 中实现 PADES 签名?

问题描述

我目前正在使用 iTextSharp 5 将数字签名应用于 PDF。我通过使用 BouncyCastle 的支持在分离模式下应用签名,如下所示:

public void Sign(PDFDocument doc, SigningKey key)
{
    using (PdfReader reader = new PdfReader(doc.Content))
    using (MemoryStream memStream = new MemoryStream())
    using (PdfStamper stamper = PdfStamper.CreateSignature(reader, memStream, '\0'))
    {
        PdfSignatureAppearance signature = stamper.SignatureAppearance;

        IExternalSignature pks = new PrivateKeySignature(key.ToParameters(), DigestAlgorithms.SHA256);
        MakeSignature.SignDetached(signature, pks, key.CertChain, null, null, null, 0, CryptoStandard.CADES);

        doc.Content = memStream.ToArray();
    }
}

我发现这CryptoStandard允许我为我的数字签名选择标准,但我看到的唯一标准是CADESand CMS,而且我还需要对 PADES 的支持。是否可以在 iTextSharp 中做到这一点?

标签: c#pdfitextdigital-signature

解决方案


焊盘

首先,您说您需要对 PADES 的支持,但您没有提及您需要哪个 PAdES 配置文件。

PAdES 最初(在 2009/2010 年)被指定为具有配置文件的 ETSI 技术规范(ETSI TS 102 778 第 1-6 部分)

  • PAdES Basic - 基于 ISO 32000-1 的 PAdES-CMS 配置文件
  • PAdES 增强型 - PAdES-BES 和 PAdES-EPES 配置文件
  • 长期 - PAdES-LTV 简介
  • PAdES for XML Content - PDF 容器中嵌入的 XML 文档的 XAdES 签名配置文件

同时(2016 年)它已更新为欧洲标准(ETSI EN 319 142 第 1-2 部分)

  • BB、BT、B-LT 和 B-LTA 级别的 PAdES 基线签名
  • PDF 中的 CMS 数字签名配置文件
  • PAdES-E-BES、PAdES-E-EPES 和 PAdES-E-LTV 级别的扩展 PAdES 签名配置文件
  • XAdES 签名的配置文件在 PDF 中签名 XML 内容

(后三个是旧配置文件的重新基督教版本,但基线配置文件现在成为焦点)。

iText 5.5.x

正如您发现的那样,iText 枚举CryptoStandard知道两个选项CMSCADES.

首先,CADES不是用于生成任意 CAdES 签名,而是用于生成专门配置的 CAdES 签名容器并将它们嵌入到 PDF 中,这是非 CMS 配置文件 PAdES 签名所必需的。

因此,关于您的问题

我还需要支持 PADES。是否可以在 iTextSharp 中做到这一点?

是的,iText 5.5.x 确实支持简单的 PAdES 配置文件。特别是,您将使用CryptoStandard以下配置文件的值:

  • CryptoStandard.CMS用于 PDF 中 CMS 数字签名的配置文件;
  • CryptoStandard.CADES对于 BB 和 BT 级别的基线签名以及 PAdES-E-BES 和 PAdES-E-EPES 级别的扩展签名。

推荐阅读