如何在 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
允许我为我的数字签名选择标准,但我看到的只有 CADES
和 CMS
,我还需要支持垫。可以在 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
知道两个选项 CMS
和 CADES
。
首先,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 级别的扩展签名。
我目前正在使用 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
允许我为我的数字签名选择标准,但我看到的只有 CADES
和 CMS
,我还需要支持垫。可以在 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
知道两个选项 CMS
和 CADES
。
首先,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 级别的扩展签名。