在Acrobat Reader中打开PDF时出现BER解码错误求助
SHA256WithRSA签名PDF验证失败:Acrobat提示BER解码错误,Java验证失效
我们遇到的问题:
- 外部服务商使用
sha256WithRSA算法签名的PDF,在Acrobat Reader中打开提示At least one signature is invalid,点击最后一页可见签名弹出Error during BER decoding - 已解析PDF中34 0 obj的/Sig对象的/Contents为Java的
ASN1Sequence,确认是有效的PKCS7签名数据,但Java验证程序验证签名失败
以下是提取出的/Contents(PKCS7对象)内容:
ASN1Sequence [ Element 0: 1 Element 1: [[[[2.5.4.6, EE]], [[2.5.4.10, AS Sertifitseerimiskeskus]], [[2.5.4.97, NTREE-10747013]], [[2.5.4.3, TEST of EID-SK 2016]]], 49055107554612652537246105176508960687] Element 2: [2.16.840.1.101.3.4.2.1, NULL] Element 3: [CONTEXT 0][[1.2.840.113549.1.9.3, [1.2.840.113549.1.7.1]], [1.2.840.113549.1.9.5, [241101172455Z]], [1.2.840.113549.1.9.4, [#8eb3dcf8e0754f9375b4e3c502bf5cb4b0540bfff399c29ea6394138e6dd2ed0]], [1.2.840.113549.1.9.16.2.47, [[[[#40526c34d739c7f78b36f04432e9a4067c376e93c95fbe005f7c1aa58fca6cbd]]]]]] Element 4: [1.2.840.113549.1.1.11, NULL] Element 5: #3960410ed9dd02a26c2cd94790487563d165f50adcfd5946634ca80e0afb649e1c5fc026083c041f0acafc823f98fadd76eca169926f76322aa342f126de3e685460b8af982b9d8d3af29757796fe0d39abd0074d0951e7bc232517024d49f7dbcf9c0d4324dcdbbb03a6621953f6a55e572e3c51872abcabbc1265d4f875e1b904cf9546f497fb9bb25463375014b904d6077c23a49a3ea222553208d67b3e62c5b382de3fd150049b44c7175ce1bfe5a4336027a6dcd29905589a8ab97043c4c96082c77b656f7fe01235d42d4475f68701cf0def292296ebc6429d64290ccfe954a122e6cae452629087556359a5b2291c3facd02ff5c90270f6083bb43634d6556c322fb3d6f82086a0fd2f04c77f96184bbedffc7fcd0c2e39816ac9b8ec4988583ab4f9e5bd05717683aff82f9d3573c575bc4f38ef4d771d1e6ebf1b0432b4b801a3c424287cc72ac33ae4fe78a73241e54ebc961b617a4134f640e14d336823a813f23ac62596cc5a018add4adf084864e7afc927106e0ef43c14b66811626c282ea112ab2afbe23f8da03933494d329799577f6a28016707bacac6b372816930d198503e240805dc6ff97454757bda5fb94b8a658300c7935b03914368a05790805aea72df6c779d282763e193fdabe42d7cd3e9ca914104000746281ef7dd6752ff8b758222466d3ec9151ac0145cfa207552d5ad5aed7728d8dbd8d425a2937ea7ee09a05ebad5e6d7c76c5b31393dbadb0adecdbd1bd5e90656d8a07cfb27f2416159c5c93423563072a531cb713c7457ffa2040a7e403d38146c76d95073cd402d4ea1ae0ace10cb3faaba749e3e186fb968165971383cc7cd8a15c7461ba26fa7ead27a3b7a71a77160139deda13e3b161b62f9ca7c2965e6f0ac2be2eeff865efab6d3e903e56a1775dfaf0b572a3d673ce523b0951900651ea67c2e7d7ac4d6262eedf56d4f6f311a8b219c0d46fd713fa69b67d62bd4965d2861ed41ce3e33b83a17623c74287edce10146b1e30ee1fefeedd2e056a92fe220ff2491aa89a472f975243367b8ac5bb64fdbbb4bc6127e729f239de38a903 ]
排查建议
- 检查BER编码完整性:Acrobat的BER解码错误大概率是PKCS7数据存在编码问题,比如字节截断、多余填充或ASN.1结构不符合规范。用专业ASN.1解析工具(如OpenSSL的
asn1parse命令)直接解析原始二进制内容,对比Java解析的ASN1Sequence是否一致,重点看签名值(Element5)的长度是否符合RSA密钥长度要求(2048位对应256字节,十六进制字符串长度应为512字符)。 - 验证PDF签名覆盖范围:提取PDF中签名对应的
/ByteRange值,计算该范围的SHA256哈希,对比PKCS7中1.2.840.113549.1.9.4对应的哈希值(#8eb3dcf8e0754f9375b4e3c502bf5cb4b0540bfff399c29ea6394138e6dd2ed0),确认签名覆盖的文档内容未被篡改。 - 检查证书链有效性:确认PKCS7是否包含完整的证书链(当前ASN.1输出未显示证书部分,需检查原始PKCS7数据),将缺失的中间证书或根证书导入Java信任库后重新验证。
- 排查Java验证逻辑:确认Java代码是否正确处理PDF的签名字节范围,是否使用了正确的签名算法(
SHA256withRSA而非单独的SHA256或RSA),是否正确解析PKCS7中的签名值和待验证数据。可使用BouncyCastle工具类直接验证PKCS7数据,排除PDF处理逻辑的干扰。 - 校验签名时间格式:检查PKCS7中签名时间(
241101172455Z)是否符合UTCTime规范,部分解析器对两位年份的处理可能存在兼容问题。
内容的提问来源于stack exchange,提问作者user1391606
相关产品推荐
相关产品推荐

