c# - 如何在 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
允许我为我的数字签名选择标准,但我看到的唯一标准是CADES
and CMS
,而且我还需要对 PADES 的支持。是否可以在 iTextSharp 中做到这一点?
解决方案
焊盘
首先,您说您需要对 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
知道两个选项CMS
和CADES
.
首先,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 级别的扩展签名。
推荐阅读
- swift - 本地 Swift 包在 Xcode 13 中停止工作
- python - 如何在 Python-VTK 中禁用 VTK 的热键
- matlab - 静态相机手眼标定算法参数错误
- java - 删除重复元素并返回其新元素和大小的程序
- elasticsearch - 有人可以解释一下弹性代理和舰队服务器之间通信的详细技术工作流程吗
- php - 尝试连接到 Stripe API 有人可以带我逐步了解这个 webhook 正在做什么(php)
- sql - SQL - 查找日期最接近但列值不同的行
- c# - 使用 Linq 在循环中连接来自 DataSet 的表
- reactjs - GitHub 页面上的 React 组件变成匿名的
- go - 在 proto 中使用结构数组