将 RSAPublic 密钥转换为 X509Certificate (Java)



问:是否可以从 Java 密钥库中读取 RSA 密钥对,可以从公钥中捕获公钥主体身份?

我使用 Java Keytool 生成了一个带有 SHA1 2048 位密钥的 RSA,并将密钥对存储在 JKS 文件中。我可以使用此处的代码加载密钥:https://stackoverflow.com/a/26711907/1203182 但是我得到的是 RSAPublicKey,而不是 X509Certificate。RSA 公钥没有任何方法可以从公钥中查找使用者标识或 DN。

有没有办法转换 RSA 公钥或以某种方式从中派生 X509 证书?或者也许我只是不明白什么。

像往常一样,我在发布此内容几秒钟后就想出了自己的答案。谈谈橡皮鸭编码。解决方案很简单,我找错了地方。下面的代码片段...

Key key = keystore.getKey(alias, "password".toCharArray());
if (key instanceof PrivateKey) {
  // Get certificate of public key
  Certificate cert = keystore.getCertificate(alias);
  //Answer > get the DN from 'cert.getSubjectDN()`
  // Get public key
  PublicKey publicKey = cert.getPublicKey();
  //publicKey is NOT where you can get the certificate DN....

我建议在处理Java中的加密和解密时使用Bouncy Castle。

这里有一些可以给你一些信息的东西(我认为他想做你想做的同样的事情(:

从密钥库中的文件读取公钥

那里的代码示例如下所示:

PEMParser pemParser = new PEMParser(new StringReader(certPEMData));
    Object parsedObj = pemParser.readObject();
    System.out.println("PemParser returned: " + parsedObj);
    if (parsedObj instanceof X509CertificateHolder)
    {
        X509CertificateHolder x509CertificateHolder = (X509CertificateHolder) parsedObj;
        return x509CertificateHolder.getSubjectPublicKeyInfo().getPublicKeyData().getString();
    }
    else
    {
        throw new RuntimeException("The parsed object was not an X509CertificateHolder.");
    }

在这里,您有充气城堡图书馆的网站,其中也应该为您提供一些信息:

充气城堡

如果您懒惰,这里是他们最新版本的链接。将该 JAR 文件包含在构建路径中,您只需复制粘贴上面的代码即可。

充气城堡图书馆直接下载

最新更新