如何将证书信息与已经签名的数据相关联



我正在尝试使用PDF-Box库(v2.0.8)将数字签名添加到PDF文档。我正在从Web服务中收到已经签名的内容(仅使用私钥签名)。现在,我需要将证书信息与此签名的数据相关联,以便将其添加到PDF文档中。我们如何将证书添加到已经签名的内容,最好使用弹性城堡API?

// here content is data which has to be signed
public byte[] sign(InputStream content) throws IOException {
        try {
            CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
            List<Certificate> certList = new ArrayList<Certificate>();
            certList.add(certificate);
            Store certs = new JcaCertStore(certList);
            gen.addCertificates(certs);
            CMSProcessableInputStream msg = new CMSProcessableInputStream(signPrivate(content));
            CMSSignedData signedData = gen.generate(msg, false);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DEROutputStream dos = new DEROutputStream(baos);
            dos.writeObject(signedData.toASN1Structure());
            return baos.toByteArray();
        } catch (Exception e) {
            throw new IOException(e);
        }
    }

在这里,我可以生成数字签名,但不包含任何证书信息。我已经检查了这个问题和这个问题,但是他们以私有密钥签名的内容为例,只需要关联证书。

(您发布的代码是指CMS签名容器,所以我想我们正在谈论 adbe.pkcs7.detached or or eetsi.cades.cades.cades.detached pdf签名。)

在CMS签名容器中创建签名时,一个人可以选择签名值是否真的仅签名文档数据的(哈希)数据,还是符合所谓的签名属性的集合SignerInfo规范中的signedAttrs)和文档数据的哈希只是其中一个属性的值。

  SignerInfo ::= SEQUENCE {
    version CMSVersion,
    sid SignerIdentifier,
    digestAlgorithm DigestAlgorithmIdentifier,
    signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
    signatureAlgorithm SignatureAlgorithmIdentifier,
    signature SignatureValue,
    unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }

(RFC 5652第5.3节。SignerInfo类型)

但是,所有要认真对待的配置文件都要求您使用签名属性,特别是他们要求您使用ESS签名认证(RFC 2634第5.4节)或ESS签名 - 认证-V2(RFC 5035第3节))签名属性以引用签名证书。

因此,在生成签名值之前,在这些属性中,签名与其签名证书的关联已修复

因此,您不能将签名证书自由关联到已经生成的签名。

相关内容

  • 没有找到相关文章

最新更新