0

我正在开发一个 Profile Certificate 软件,需要使用 V2Form 作为 BasicCertificateID。

                    issuerGenName = new GeneralNames(new GeneralName(new X500Name(issuerName)));
        ASN1Integer issuerSerialNumber = new ASN1Integer(Integer.parseInt(mainWindow.getIssuerSerialNumber()));
        //IssuerSerial baseCertificateID = new IssuerSerial(issuerGenName,  issuerSerialNumber);
        ASN1EncodableVector vec = new ASN1EncodableVector();
        ASN1EncodableVector vecS = new ASN1EncodableVector();
        vecS.add(issuerGenName);
        vecS.add(issuerSerialNumber);
        ASN1Sequence seq = new DERSequence(vecS);
        IssuerSerial baseCertificateID  = IssuerSerial.getInstance(seq);
        ASN1TaggedObject tagged = new DERTaggedObject(0, baseCertificateID);
        //TODO Refazer
        vec.add(issuerGenName);
        vec.add(tagged);
        ASN1Sequence seq2 = new DERSequence(vec);

        V2Form teste = new V2Form(seq2);


        issuer = new AttCertIssuer(teste); 
        attIssuer = new AttributeCertificateIssuer(issuer);

但这不起作用,我做错了什么?

4

1 回答 1

0

ASN1TaggedObject 标记=新DERTaggedObject(0,baseCertificateID);

应该读

ASN1TaggedObject tagged = new DERTaggedObject(false, 0, baseCertificateID);

该对象是隐式的,而不是显式的标记。

另一件事是,在 BC 中,您应该始终使用模式 V2Form.getInstance() 而不是调用采用序列的构造函数。我们正在慢慢消除这些,主要问题是它并不安全,在某些情况下,您可能会意外地获得类转换异常,因为序列构造函数无法处理 getInstance() 可以处理的所有情况。

对于 BC 而言,V2Form 确实需要更多的构造函数,这些构造函数应该会在接下来的几天内出现在下一个 beta (149b09) 中。

问候,

大卫

于 2013-03-12T23:03:04.817 回答