我有一个Java程序,当前使用私有(private)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 :)
  • 最佳答案

    好的,那么我猜它不存在。

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

    07-26 09:13
    查看更多