基本上,我想要实现的是制作私钥/公共证书对,以便将其导出到pkcs12仓库。证书字段将填充用户通过标准输入或GUI插入的数据。这是一个问题,因为我只能找到加载现有证书和获取v3扩展的方法,但不能设置它们。另外,我想避免使用任何外部库,如BouncyCastle。
到目前为止,我已经能够使用sun.security.tools.keytool.CertAndKeyGen类和X500Name对象生成证书,但我还没有找到任何方法来为它提供电子邮件信息,因为X500Name没有有一个适当的构造函数,以及版本3扩展(特别是基本约束,替代发行者名称和密钥用法)。
另一方面,我一直在研究java.security.cert.CertificateFactory及其generateCertificate()方法。它期望将base64编码的现有证书的InputStream作为参数。因此,为了满足我生成证书而不加载现有证书的要求,我找到了一种从String获取InputStream的方法:
InputStream stream = new ByteArrayInputStream(exampleString.getBytes("UTF-8"));
我知道此字符串应以BEGIN CERTIFICATE开头,以END CERTIFICATE结尾以模仿实际证书,但我不知道如何从原始数据生成它。
因此,总结一下我的问题:有没有办法以编程方式使用包括电子邮件和v3扩展名在内的字段填充空的X.509证书而不使用BouncyCastle等外部库?
提前致谢。