首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CAdES用BouncyCastle对BouncyCastle进行签名

使用CAdES用BouncyCastle对BouncyCastle进行签名
EN

Stack Overflow用户
提问于 2012-12-03 00:26:53
回答 2查看 8.5K关注 0票数 3

根据几篇文章,我发现现在可以使用CAdES执行BouncyCastle,但是几乎没有关于这个主题的文档。

首先,我想在一个文件上执行CAdES,而不需要任何可选的签名属性,该文件具有基于文件的证书。

作为对皮屑的回应:

我有一些可能有用的东西,您有您的SignerInformation,您需要扩展它,首先您需要根据时间戳创建一个属性,我假设您已经有了一个TimeStampResponse作为tspResp

代码语言:javascript
复制
TimeStampToken token = tsresp.getTimeStampToken();

Attribute timeStamp = new Attribute(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, new DERSet(ASN1Object.fromByteArray(token.getEncoded())));

那么您需要扩展您的SignerInformation

代码语言:javascript
复制
AttributeTable unsigned = signerInformation.getUnsignedAttributes();
Hashtable<ASN1ObjectIdentifier, Attribute> unsignedAttrHash = null;
if (unsigned == null) {
    unsignedAttrHash = new Hashtable<ASN1ObjectIdentifier, Attribute>();
} else {
    unsignedAttrHash = signerInformation.getUnsignedAttributes().toHashtable();
}

unsignedAttrHash.put(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, signatureTimeStamp);

SignerInformation newsi = SignerInformation.replaceUnsignedAttributes(si, new AttributeTable(
        unsignedAttrHash));

我想就是这样了。

下面是我如何获得签名证书属性的方法

代码语言:javascript
复制
Attribute signingCertificateAttribute;
MessageDigest dig = MessageDigest.getInstance(DigestAlgorithm().getName(),
    new BouncyCastleProvider());

byte[] certHash = dig.digest(SigningCertificate().getEncoded());

if (DigestAlgorithm() == DigestAlgorithm.SHA1) {
    SigningCertificate sc = new SigningCertificate(new ESSCertID(certHash));

    signingCertificateAttribute = new Attribute(PKCSObjectIdentifiers.id_aa_signingCertificate, new DERSet(sc));

} else {
    ESSCertIDv2 essCert = new ESSCertIDv2(new AlgorithmIdentifier(DigestAlgorithm().getOid()), certHash);
    SigningCertificateV2 scv2 = new SigningCertificateV2(new ESSCertIDv2[] { essCert });

    signingCertificateAttribute =  new Attribute(PKCSObjectIdentifiers.id_aa_signingCertificateV2, new DERSet(scv2));
}

希望它能帮上忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-16 10:20:02

CAdES是CMS (又称PKCS7)的扩展,它可以通过BouncyCastle来实现。RFC5126包含了CAdES签名所需的一切,而且,我推荐在ASN.1上查找信息,因为大多数部分都是以这种格式描述的。

我目前正在寻找你正在寻找的同样的答案,并发现这本书大卫·胡克用Java开始密码学给出了很多你可能需要的详细信息。

票数 3
EN

Stack Overflow用户

发布于 2015-03-11 13:59:39

有用的代码可以在"https://joinup.ec.europa.eu/“中找到

看一看CAdESProfileBES.java

有人在原来的SD叉子-数字签名服务上放了相同的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13675583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档