我正在开发一个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);
但这不起作用,我做错了什么?
答案 0 :(得分:0)
ASN1TaggedObject tagged = new DERTaggedObject(0,baseCertificateID);
应该阅读
ASN1TaggedObject tagged = new DERTaggedObject(false,0,baseCertificateID);
该对象是隐式的,没有明确标记。
另外一件事,在BC中你应该总是使用模式V2Form.getInstance()而不是调用一个接受序列的构造函数。我们慢慢地将它们标记出来,主要问题是它不是很安全,在某些情况下你可以意外地获得类转换异常,因为序列构造函数无法处理getInstance()可以处理的所有情况。
对于不列颠哥伦比亚省来说,V2Form确实需要更多的构造函数,这些构造函数应该会在接下来的几天内出现在下一个测试版(149b09)中。
此致
大卫