如何在Java的Bouncy Castle中使用V2Form?

时间:2013-03-12 01:12:45

标签: java security certificate bouncycastle

我正在开发一个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);

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

1 个答案:

答案 0 :(得分:0)

ASN1TaggedObject tagged = new DERTaggedObject(0,baseCertificateID);

应该阅读

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

该对象是隐式的,没有明确标记。

另外一件事,在BC中你应该总是使用模式V2Form.getInstance()而不是调用一个接受序列的构造函数。我们慢慢地将它们标记出来,主要问题是它不是很安全,在某些情况下你可以意外地获得类转换异常,因为序列构造函数无法处理getInstance()可以处理的所有情况。

对于不列颠哥伦比亚省来说,V2Form确实需要更多的构造函数,这些构造函数应该会在接下来的几天内出现在下一个测试版(149b09)中。

此致

大卫