将 RSAPublic 密钥转换为 X509Certificate (Java)
Convert RSAPublic key to X509Certificate (Java)
问:是否可以从 Java 密钥库中读取 RSA 密钥对可以从 public 密钥中捕获 public 密钥主体身份?
我使用 Java Keytool 生成了带有 SHA1 2048 位密钥的 RSA,并将密钥对存储在 JKS 文件中。我可以使用此处的代码加载密钥: 但是我得到的是 RSAPublic 密钥,而不是 X509 证书。 RSA Public 密钥没有任何方法可以从 public 密钥中找到主题标识或 DN。
有没有办法转换 RSA Public 密钥或以某种方式从中导出 X509 证书?或者也许我只是不理解某些东西。
我建议在 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 图书馆的网站,应该也有一些信息供您参考:
如果你很懒,这里是 link 他们的最新版本。将该 JAR 文件包含在您的构建路径中,您只需复制粘贴上面的代码即可。
和往常一样,我在发布这篇文章后几秒钟就想出了自己的答案。谈论橡皮鸭编码。解决方案很简单,我找错了地方。下面的代码片段...
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 密钥库中读取 RSA 密钥对可以从 public 密钥中捕获 public 密钥主体身份?
我使用 Java Keytool 生成了带有 SHA1 2048 位密钥的 RSA,并将密钥对存储在 JKS 文件中。我可以使用此处的代码加载密钥: 但是我得到的是 RSAPublic 密钥,而不是 X509 证书。 RSA Public 密钥没有任何方法可以从 public 密钥中找到主题标识或 DN。
有没有办法转换 RSA Public 密钥或以某种方式从中导出 X509 证书?或者也许我只是不理解某些东西。
我建议在 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 图书馆的网站,应该也有一些信息供您参考:
如果你很懒,这里是 link 他们的最新版本。将该 JAR 文件包含在您的构建路径中,您只需复制粘贴上面的代码即可。
和往常一样,我在发布这篇文章后几秒钟就想出了自己的答案。谈论橡皮鸭编码。解决方案很简单,我找错了地方。下面的代码片段...
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....