X509CertificateHolder构造函数不接受X509CertificateStructure作为参数

时间:2014-01-20 17:05:09

标签: java javascript certificate x509certificate bouncycastle

我对java编程很陌生,我还在讨论一些事情。我正在尝试使用一些自定义实现bouncycastle certUtils。但是X509CertificateHolder构造函数接受X509CertificateStructure作为参数。编译器一直建议我将生成结构的函数的返回类型更改为byte []。在这种情况下拒绝将X509CertificateStructure作为参数。这在正常情况下不应该发生,因为X509CertificateHolder有一个接受X509CertificateStructure的构造函数。 http://grepcode.com/file/repo1.maven.org/maven2/org.bouncycastle/bcmail-jdk16/1.46/org/bouncycastle/cert/X509CertificateHolder.java#X509CertificateHolder

这是发生错误的代码。

 static X509CertificateHolder  generateFullCert(ContentSigner signer, TBSCertificateStructure tbsCert)

 {
    try
     {


         return  new X509CertificateHolder((generateStructure(tbsCert, signer.getAlgorithmIdentifier(), generateSig(signer, tbsCert)))); // the error occurs here
     }

     catch (IOException e)

     {

         throw new IllegalStateException("cannot produce certificate signature");

     }

   }

 private static X509CertificateStructure    generateStructure(TBSCertificateStructure tbsCert, AlgorithmIdentifier sigAlgId, byte[] signature)


 {


     ASN1EncodableVector v = new ASN1EncodableVector();



     v.add(tbsCert);

     v.add(sigAlgId);
     v.add(new DERBitString(signature));



     return X509CertificateStructure.getInstance(new DERSequence(v));

 }

有没有人知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

您似乎在项目中使用了另一个版本的 bouncycastle 罐子,而不是提到1.46。 例如。 bcpkix-jdk14- 1.50 .jar 仅为X509CertificateHolder提供以下构造函数:

/**
 * Create a X509CertificateHolder from the passed in bytes.
 *
 * @param certEncoding BER/DER encoding of the certificate.
 * @throws IOException in the event of corrupted data, or an incorrect structure.
 */
public X509CertificateHolder(byte[] certEncoding)
    throws IOException
{
    this(parseBytes(certEncoding));
}

/**
 * Create a X509CertificateHolder from the passed in ASN.1 structure.
 *
 * @param x509Certificate an ASN.1 Certificate structure.
 */
public X509CertificateHolder(Certificate x509Certificate)
{
    this.x509Certificate = x509Certificate;
    this.extensions = x509Certificate.getTBSCertificate().getExtensions();
}

看起来更像你的编译器建议改为。