2

いくつかの投稿によると、BouncyCastleを使用してCAdESを実行できるようになったことを発見しましたが、このトピックに関するドキュメントはほとんどありません。

手始めに、ファイルベースの証明書を持つファイルに対してオプションの署名付き属性なしでCAdES-BESを実行したいと思います。


皮屑に応じて:

私は役に立つかもしれない何かを持っています、あなたはあなたのSignerInformationを持っています、あなたはそれを拡張する必要があります、最初にあなたはタイムスタンプから属性を作成する必要があります、私はあなたがすでにtspRespとしてTimeStampResponseを持っていると仮定します

TimeStampToken token = tsresp.getTimeStampToken();

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

次に、SignerInformationを拡張する必要があります

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));

それだけだと思います。

これが私がsignin-certificate属性を取得した方法です


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));
}

それが役に立てば幸い

4

2 に答える 2

3

CAdESはCMS(別名PKCS7)の拡張であり、BouncyCastleで実行できます。RFC5126には、CAdES署名に必要なすべてのものが含まれています。また、ほとんどの部分がその形式で記述されているため、ASN.1のルックアップ情報をお勧め​​します。

私は現在、あなたが探しているのと同じ答えを探しています。DavidHookの著書Beginning Cryptography with Javaには、必要になる可能性のある多くの詳細情報が記載されています。

于 2013-01-16T10:20:02.860 に答える
3

便利なコードは「https://joinup.ec.europa.eu/」にあります。

CAdESProfileBES.javaを見てください。

誰かが元のSDのフォークに同じコードを入れました-デジタル署名サービス。

于 2015-03-11T13:59:39.853 に答える