如何仅使用JDK支持的类生成自签名证书?

时间:2016-08-25 11:18:42

标签: java x509certificate

我有一个Java程序,它目前使用私有JDK类(CertAndKeyGenX500Name)来生成自签名X.509证书。 这种方法存在太多问题:

  • 内部包裹不断变化:
    • “sun.security.x509.CertAndKeyGen”,// Oracle / Sun / OpenJDK 6,7
    • “sun.security.tools.keytool.CertAndKeyGen”,// Oracle / Sun / OpenJDK 8
    • “com.ibm.security.x509.CertAndKeyGen”,// IBM SDK 7
    • “com.ibm.security.tools.CertAndKeyGen”// IBM SDK 8
    • 显然JDK 7更新(u111?)最近更改了上面列出的软件包
  • Java 9将隐藏这些类

我想将此代码转换为使用标准的,受支持的JDK类。

我已经看过使用名称不明的CertificateFactory.generateCertificate()方法,但没有运气:他们无法生成任何证书,他们只能加载现有证书。

有人知道可以生成自签名证书的标准JDK API吗?

这是我可以去的地方:

KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, SecureRandom.getInstance("SHA1WithRSA"));
KeyPair keyPair = generator.generateKeyPair();
PrivateKey privatekey = keyPair.getPrivate();

X500Principal principal = new X500Principal(dn);

CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
// How to generate the self-signed certificate from there?
// certFactory.generate(inputStream) // only able to load an existing certificate

注意:

  • 如果可能的话,我们不想引入对弹性城堡的依赖
    • 我已经知道X509V3CertificateGenerator
  • 我们不希望通过keytool:)
  • 调用ProcessBuilder

1 个答案:

答案 0 :(得分:2)

好的,那我觉得它不存在。

我提交给JDK的RFE已被接受,现在有一个官方错误:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8165481