【问题标题】:X509CertificateHolder constructor not accepting the X509CertificateStructure as argumentX509CertificateHolder 构造函数不接受 X509CertificateStructure 作为参数
【发布时间】:2014-02-09 23:25:06
【问题描述】:

我对 Java 编程很陌生,但我仍然在为一些事情苦苦挣扎。我正在尝试通过一些自定义来实现 bouncycastle certUtils。但是 X509CertificateHolder 构造函数接受 X509CertificateStructure 作为参数。编译器不断建议我将生成结构的函数的返回类型更改为字节 []。在这种情况下拒绝 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));

 }

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

【问题讨论】:

  • 如果问题太简单,我必须阅读一些工作人员。我很乐意有任何建议

标签: java javascript certificate x509certificate bouncycastle


【解决方案1】:

您的项目中似乎使用了另一个版本的 bouncycastle jar,而不是提到的 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();
}

这看起来更像您的编译器建议更改的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2016-09-03
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2019-05-27
    相关资源
    最近更新 更多