当前位置: 首页 > 知识库问答 >
问题:

如何从摘要中生成PKCS#7签名?

鞠子轩
2023-03-14

我想用pdf摘要签署pdf文件。我使用下面的代码创建了散列,

byte[] buffer = new byte[1024];
int numOfBytesRead =0;
MessageDigest md = null;
md = MessageDigest.getInstance("SHA256","BC");
while((numOfBytesRead = content.read(buffer)) != -1 ){
     md.update(buffer, 0, numOfBytesRead);
}
byte[] digest = md.digest();

最后,我需要把这个签名附在我的PDF上。我找到了一个解决方案,从文件摘要创建pkcs7签名,但在链接中使用的算法是SHA256with RSA。我的privatekey是使用EC算法生成的,我需要使用SHA256withECDSA。是否可以使用SHA256withECDSA对哈希进行签名,并使用PDFBox ExternalSigning接口将签名附加到pdf中。

共有1个答案

印成天
2023-03-14

在几种情况下,Adobe称签名者的证书无效,尽管它显然是有效的;特别是在手头的案例中:

  • 密钥用法或扩展密钥用法值不适当
  • pades签名丢失ESS signing-certificate-v2属性

这是基于OP首次作为答案发布的信息

它说“自从这个签名被应用以来,文档没有被修改”-这意味着签名在数学上是正确的!

问题是“签名者的证书无效”,在深入挖掘签名属性对话时可以看出原因:

因此,问题是您的签名者证书对使用无效。

    null

和下列一个或多个扩展密钥使用值(如果有)

  • 电子邮件保护
  • 协同设计
  • AnyExtendedKeyUsage
  • 1.1.840.113583.1.1.5(Adobe Authical Documents Trust)

因此,由于其IPSEC保护扩展密钥使用值,您的证书对PDF文档的签名无效。

这是基于OP首次作为答案发布的信息

我已经创建了2个pdf文件,PDFA是用下面代码的pdf内容摘要签名的,

[...]

这里的主要区别不在于您是自己显式地计算哈希还是允许隐式地计算哈希,主要区别在于PDFB中的签名包含ESS signing-certificate-v2属性,而PDFA中的签名不包含ESS signing-certificate-v2属性。此属性生成于

//PAdES - PDF Advanced Electronic Signature

//PAdES-end

正如评论已经暗示的,这只对PAdES签名是必要的,而不是对传统的ISO 32000-1签名。OP的答案是,当OP创建PAdES签名时,他的原始代码被引用为创建遗留的ISO 32000-1签名(因此,工作正常)。

它引用了CAdES规范ETSI EN 319 122-1,该规范又要求

h)spo的要求:ESSsigning-certifice。如果使用SHA-1哈希算法,则应使用ESSsigning-certifice属性。

i)spo的要求:ESSsigning-certificate-v2。当使用SHA-1以外的其他哈希算法时,应使用ESSsigning-certificate-v2属性。

 类似资料:
  • 我试图实现PDFS的签名验证。这是一个很大的主题,所以我一步一步地进行,首先,我试图在我自己签名的PDF中实际返回一个正值,使用当前Acrobat的所有默认值--对于摘要,应该是SHA256和PKCS7分离签名。因此,我破解了openssl,通过读取PDF中给出的字节范围并调用函数,我得到了一个哈希值来进行比较。因此,现在我需要读取证书数据等,并使用函数。这个看起来就是我想要的: 如文档中所示。除

  • 我有一个关于计算PDF文档摘要以用于数字签名的快速问题(与我前面的一个问题有点相关,我试图弄清楚为什么您需要知道客户的证书以创建正确的摘要)。在Adobe关于PDF格式的文档中,指定了以下内容: 字节范围摘要应在文件中的一个字节范围内计算,该范围应由签名字典中的字节范围条目指示。这个范围应该是整个文件,包括签名字典,但不包括签名值本身(内容条目)。 因此,在这一点上,事情似乎相当简单,只需消化除/

  • 当我从REST客户端调用APIendpoint时,由于涉及Signature而出错。 请求: 主持人:https://xxx.execute-api.ap-southeast-1.amazonaws.com/latest/api/name 授权: AWS4-HMAC-SHA256凭据=/20160314/ap-东南-1/执行-api/aws4_request, SignedHeaders=host

  • 问题内容: 我已经在我的应用程序上编写了广泛的JavaDoc文档,并在和文件中添加了许多有用的信息(包括前者到中的插图的链接)。Maven的Javadoc插件很好地使用了标准的javadoc工具来生成经典的JavaDoc框架集,但是现在我需要使用整个文档来生成PDF。 AurigaDoclet生成非常漂亮的PDF,我也能够使DocFlex正常工作。但是,它们都忽略了我和文件(在Maven内部和外部

  • 问题内容: 目前,我有一个客户端-服务器应用程序,给定一个PDF文件,使用服务器证书对其进行签名,将签名与原始文件一起附加,然后将输出返回给客户端(所有这些操作均通过PDFBox实现)。 我有一个签名处理程序,这是我的外部签名支持(其中内容为PDF文件) 它工作正常,但我在想-如果PDF文件太大而无法上传怎么办?例如:100mb …这将永远!鉴于此,我想弄清楚,如果不对PDF文件签名,是否可以仅对

  • 我开始学密码学了。我需要用XML、RSA私钥(证书中不包括的是文件扩展名。key)和证书。cer扩展名生成一个PKCS#7文件。 为此,我使用了一个bouncycastle。 编辑: