2013-03-12 101 views
0

我正在开发配置文件证书软件,并且需要使用V2Form for BasicCertificateID。如何在Bouncy Castle,Java中使用V2Form?

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

但这不行,我做错了什么?

回答

0

ASN1TaggedObject tagged = new DERTaggedObject(0,baseCertificateID);

应读

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

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

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

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

问候,

大卫

相关问题