JcaX509CertificateConverter设置无法找到所需的提供程序,没有BC提供程序。

5

我不明白为什么在setProvider("BC")中没有将BC识别为提供程序。我已经下载了最新的BouncyCastle hierhttp://www.bouncycastle.org/latest_releases.html并成功导入。但是,当我运行以下代码时:

X509Certificate crt=(X509Certificate)(new JcaX509CertificateConverter().setProvider("BC").getCertificate(crthold)); 

我遇到了一个异常,提示找不到供应商 BC。

请问有人知道如何解决吗?以下是我收到的错误消息

org.bouncycastle.cert.jcajce.JcaX509CertificateConverter$ExCertificateException: cannot find required provider:no such provider: BC
at org.bouncycastle.cert.jcajce.JcaX509CertificateConverter.getCertificate(Unknown Source)
at client.ClientService.genCert(ClientService.java:399)

4
我对这个问题感到非常不好意思,因为它其实很容易解决。我只是加了一个BouncyCastleProvider的实例,而不是BC,然后就完美地解决了。为了那些可能会在同样情况下的人们,我会添加答案。 X509Certificate crt=(X509Certificate)(new JcaX509CertificateConverter().setProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()).getCertificate(crthold)); - zeroday
你也可以在需要提供程序之前或应用程序入口点调用Security.addProvider(new BouncyCastleProvider()); - divanov
@zeroday,你应该将你的评论添加为答案并接受它,这样其他人将来可以更容易地找到它。 - nedim
2个回答

8

我刚刚添加了BouncyCastleProvider的实例而不是BC,并且它完美地工作了。我会为那些未来可能遇到相同情况的人提供答案:

X509Certificate crt=(X509Certificate)(new JcaX509CertificateConverter().setProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()).getCertificate(crthold));

3
你需要安装Bouncy Castle提供者才能通过名称检索它。这可以通过java.security属性文件或以下方法调用来完成:
Security.addProvider(new BouncyCastleProvider());

您可以通过BouncyCastleProvider.PROVIDER_NAME来引用此提供程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接