我对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));
}
有没有人知道出了什么问题。
答案 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();
}
看起来更像你的编译器建议改为。