Java ECC Brainpool支持证书?

时间:2015-07-13 16:23:52

标签: java cryptography elliptic-curve

最新版本的Java不支持ECC Brainpool曲线。当我读到包含EC Curve Brainpool的X509Certificate时,我得到了一个例外。

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

1 个答案:

答案 0 :(得分:4)

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的无限加密文件也不会受到伤害,虽然这个功能可能不是直接需要的(尽管比抱歉更安全)。