Java ECC Brainpool 支持证书吗?

Java ECC Brainpool support for certificates?

Java 的最新版本不支持 ECC Brainpool 曲线。当我读取包含 EC Curve Brainpool 的 X509Certificate 时,出现异常。

我发现 Java 不支持带有 Brainpool 曲线的证书。有没有办法自己添加这个支持?

Bouncy Castle 支持这些曲线。诀窍是 Java 仍然必须了解它们才能找到它们。因此,您不能只添加 Bouncy Castle 提供程序并完成它。您需要明确使用 Bouncy Castle 的 CertificateFactory

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

Exception in thread "main" java.security.cert.CertificateParsingException: java.io.IOException: Unknown named curve: 1.3.36.3.3.2.8.1.1.7

因此请改用以下代码片段/解决方案:

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 Castle 特定代码(即直接使用 Bouncy 类 而不是通过 JCA 使用它们):

ECPublicKey publicKey = (ECPublicKey) generatedCertificate.getPublicKey();
// Bouncy Castle specific class
ECNamedCurveSpec params = (ECNamedCurveSpec) publicKey.getParams();
System.out.println(params.getName());

差点忘记:您需要 Bouncy Castle 提供程序 类路径中的 PKIX jar 文件来执行此操作。

为 Java 下载无限制的加密文件也不会造成任何伤害,尽管此功能可能并不直接需要它(尽管安全总比遗憾好)。对于更新的 Java 版本,这可能不再需要。