将RSAPublic密钥转换为X509Certificate(Java)

时间:2017-04-11 19:42:10

标签: java rsa x509certificate x509 jks

问:从Java Key Store读取RSA密钥对是否可以从公钥中捕获公钥主题标识?

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

有没有办法转换RSA公钥或以某种方式从中获取X509证书?或许我只是不理解某事。

2 个答案:

答案 0 :(得分:1)

和往常一样,我在发布此消息后几秒钟就提出了自己的答案。谈谈橡皮鸭编码。解决方案相当简单,我在错误的地方寻找。下面的代码片段......

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....

答案 1 :(得分:-1)

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

这可以为您提供一些信息(我想他想做同样的事情):

Read public key from file in keystore

代码示例如下所示:

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.");
    }

在这里你有一个Bouncy Castle图书馆的网站,它也应该为你提供一些信息:

Bouncy Castle

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

Bouncy Castle library direct download