首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java对证书的脑池支持?

Java对证书的脑池支持?
EN

Stack Overflow用户
提问于 2015-07-13 16:23:52
回答 2查看 2.9K关注 0票数 3

最新版本的Java不支持ECC脑池曲线。当我阅读一个包含EC曲线脑池的X509Certificate时,我会得到一个异常。

我发现Java不支持带有脑池曲线的证书。有什么办法让我自己增加这种支持吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-13 18:48:15

弹跳城堡支持这些曲线。诀窍是Java仍然需要了解它们才能找到它们。因此,您不能只是添加弹跳城堡提供商,并完成它。您需要显式地使用Bounsi城堡的CertificateFactory

如果您只使用了Java CertificateFactory,就会遇到以下异常(您现在可能已经熟悉了这个异常):

代码语言:javascript
运行
复制
Exception in thread "main" java.security.cert.CertificateParsingException: java.io.IOException: Unknown named curve: 1.3.36.3.3.2.8.1.1.7

因此,可以使用以下代码片段/解决方案:

代码语言:javascript
运行
复制
Security.addProvider(new BouncyCastleProvider());
// explicit BC factory required, knows about curve!
CertificateFactory fact = CertificateFactory.getInstance("X509", BouncyCastleProvider.PROVIDER_NAME); 
PemReader reader = new PemReader(new FileReader("ecc_certificate.txt"));
PemObject readPemObject = reader.readPemObject();
final byte[] cert = readPemObject.getContent();
Certificate generatedCertificate = fact.generateCertificate(new ByteArrayInputStream(cert));
System.out.println(generatedCertificate);

然而,要获得命名曲线的名称,您需要转到Bouncy城堡特定的代码(即直接使用Bouncy类而不是通过JCA使用它们):

代码语言:javascript
运行
复制
ECPublicKey publicKey = (ECPublicKey) generatedCertificate.getPublicKey();
// Bouncy Castle specific class
ECNamedCurveSpec params = (ECNamedCurveSpec) publicKey.getParams();
System.out.println(params.getName());

几乎忘记了:要做到这一点,您需要类路径中的Bouncy城堡提供程序和PKIX jar文件。

下载用于Java的无限加密文件也不会有任何影响,尽管这种功能可能并不直接需要它(虽然比遗憾更安全)。对于更新的Java版本,这可能不再是必需的了。

票数 5
EN

Stack Overflow用户

发布于 2022-09-07 19:53:12

EC曲线脑池在Java 15 (问题)中已被禁用,并在Java 15之后被删除。解决方案是添加第三方库(如bcprov-jdk15on )。然后你只需要指出提供者。示例:

代码语言:javascript
运行
复制
Security.addProvider(new BouncyCastleProvider()); // load third-party lib
Signature SHA256 = Signature.getInstance("SHA256withECDSA", "BC"); // use BC provider

使用这两行代码,您可以消除Java 15上的"Legacy SunEC曲线禁用“和Java >15中的”曲线不受支持“的异常。更多信息这里。以及如何在baeldung.com中使用JavaBenniy城堡的详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31388538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档