iText7-dotnet 8.0.2:无TimeStampToken的Pkcs7引发未知PdfException
iText7 .NET 8.0.2:Pkcs7未签名属性无TimeStampToken时触发Unknown PdfException异常
问题现象
- 使用iText7-dotnet 8.0.2版本,当Pkcs7的未签名属性段中不存在TimeStampToken属性时,调用
PdfPKCS7构造函数会抛出Unknown PdfException异常。 - 异常堆栈信息:
iText.Kernel.Exceptions.PdfException HResult=0x80131500 Message=Unknown PdfException. Source=itext.sign StackTrace: at iText.Signatures.SignatureUtil.ReadSignatureData(String signatureFieldName) ... This exception was originally thrown at this call stack: iText.Bouncycastle.Asn1.Cms.AttributeBC.GetAttrValues() iText.Signatures.PdfPKCS7.PdfPKCS7(byte[], iText.Kernel.Pdf.PdfName)
合规性说明
PAdES规范并未强制要求SignerInfo结构包含未签名属性时必须附带TimeStampToken属性。例如仅在未签名属性中添加带自定义信息的UnstructuredName时,ETSI在线验证器仅会给出警告:
An unknown attribute, defined by OID 1.2.840.113549.1.9.2 has been reached. Its contents and their processing are unknown to the AdESCC. No further checks will be done to this component
问题根源
通过分析iText7-dotnet源码定位到问题:
- 解析未签名属性段时,代码会尝试提取OID为
1.2.840.113549.1.9.16.2.14(id-aa-timeStampToken)的属性 itext7.bouncy-castle-adapter库的IAttributeTable.Get(IDerObjectIdentifier oid)方法未检查目标OID是否存在于属性表中,反而直接返回一个传入null值的AttributeBC实例- 后续
PdfPKCS7构造函数调用该空实例的GetAttrValues()方法时触发异常
另外,对比iText7 Java版本的对应代码逻辑,推测该问题在Java版本中同样存在,但未做实际测试。
内容的提问来源于stack exchange,提问作者riccardo
相关产品推荐
相关产品推荐

