当前位置: 首页 > 知识库问答 >
问题:

将公钥转换为X509Certificate(Java)

赏光霁
2023-03-14

问:是否可以从Java密钥存储读取RSA密钥对可以从公钥捕获公钥主体标识?

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

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

共有2个答案

姬俊远
2023-03-14

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

这里有一些东西可以给你一些信息(我想他也会像你想的那样做):

从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图书馆的网站,也应该有一些信息:

弹跳城堡

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

Bouncy Castle图书馆直接下载

岳玉书
2023-03-14

和往常一样,我在发布这篇文章几秒钟后就想出了自己的答案。谈论橡皮鸭编码。解决办法很简单,我找错地方了。下面的代码片段。。。

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编写的第三方库。 第三方库使用Java类“ RSAPublicKeySpec”从字符串生成RSAPublicKey类型的实例。 我提供给该第三方库的字符串取自以下格式的文件: 仔细研究一下代码之后,我可以看到,如果我使用java类“ X509EncodedKeySpec”来加载此公共密钥,则代码的签名验证部

  • 我有以下公钥(作为示例): 我需要能够将其转换为可以插入ssh known_hosts文件的格式。例如: 谢了!

  • 我需要将生成的BouncyCastle转换为,并将私钥加载到结果的.NET标准对象中。这可能吗? 对于类似的问题有一个答案https://stackoverflow.com/a/8150799/5048935,但是在生成一个BouncyCastle证书并将其转换为.NET之后,结果对象的属性设置为“false”。 我需要将证书和私钥(不带页眉和页脚的单独的Base64字符串)加载到对象中,以便将其

  • 这是我生成RSA密钥的代码 现在我想转换DER/ASN.1编码字节,也知道使用Java JCE API生成RSA密钥时使用的默认编码格式是什么。

  • 我的公共在ssh-rsa是: ssh rsa aaaab3nzac1yc2aaaaaadaqabaababaqclaxt5s/wux04oxbt9r59wcl45omau3m0063lfyja7ovqavr7/2kHtLF/LoCQCXSZMny8RTCGDjoXD7G/tGsyHFDHCI//Y1VDLE06AlDzrlu69DQY91 6gkhghgjh3sf6us5hxlihrbsflf8g

  • 我需要用java生成openssh格式的密钥对。 我使用java中的KeyPairGenerator生成了一个公私密钥对,并将其保存到一个文件中: 但是,如果我尝试使用这个与ssh-keygen我得到一个"失败加载密钥private.key:无效格式" 如何将PKCS#8私钥转换为openssh格式或生成openssh格式的密钥对?