如何在 iTextSharp 5 中实现 PADES 签名?

How to implement PADES signature in iTextSharp 5?

我目前正在使用 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, '[=10=]'))
    {
        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 允许我为我的数字签名选择标准,但我看到的只有 CADESCMS,我还需要支持垫。可以在 iTextSharp 中实现吗?

PAdES

首先,你说你需要对 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 配置文件
  • XML 内容的 PAdES - XML 文档的 XAdES 签名配置文件嵌入在 PDF 容器

与此同时 (2016) 它已更新为欧洲标准(ETSI EN 319 142 第 1-2 部分)和配置文件

  • B-B、B-T、B-LT 和 B-LTA 级别的 PAdES 基线签名
  • PDF 格式的 CMS 数字签名配置文件
  • PAdES-E-BES、PAdES-E-EPES 和 PAdES-E-LTV 级别的扩展 PAdES 签名配置文件
  • 用于 XAdES 签名的配置文件签署 XML PDF 中的内容

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

iText 5.5.x

如您所见,iText 枚举 CryptoStandard 知道两个选项 CMSCADES

首先,CADES不是用于生成任意 CAdES 签名,而是用于生成特殊配置的 CAdES 签名容器并将它们嵌入到 PDF 中,因为非CMS 配置文件 PAdES 签名。

关于您的问题,因此

I also require support for PADES. Is it possible to do it in iTextSharp?

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

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