【问题标题】:How to convert OpenSSH private key to RSA private key in Java?如何在 Java 中将 OpenSSH 私钥转换为 RSA 私钥?
【发布时间】:2019-11-15 22:39:04
【问题描述】:

我有一个 OpenSSH 格式的私钥文件:

-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

但我需要 RSA 格式:

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

在终端上我会这样做:

ssh-keygen -p -m PEM -f my-openssh-file

但我需要用 Java 来完成。

我尝试过使用 org.bouncycastle.openssl.PEMWriter,但我不知道如何将我的输入密钥(作为输入字符串)转换为可以传递给 PEMWriter 的 PrivateKey 对象。

【问题讨论】:

  • openssh 格式相对较新,目前除了 openssh 之外的其他任何东西都不支持。
  • @JamesKPolk 是的,不幸的是,这正是我想将其转换为 RSA 的原因。当您使用 ssh-keygen 时,最新版本的 OSX Mojave 默认会生成 openssh 密钥文件,因此我们看到不少用户无意中使用了这些密钥文件。想要为他们自动转换。

标签: java rsa jsch ssh-keys


【解决方案1】:

这实际上可以通过Maverick Synergy Java SSH API 实现。

我们 SSH API 的这个新分支支持新的 OpenSSH 私钥文件格式,因此您可以加载新密钥并将其转换为 BouncyCastle 支持的旧 PEM 格式。

您将需要以下 maven 依赖项:

    <dependency>
        <groupId>com.sshtools</groupId>
        <artifactId>maverick-synergy-client</artifactId>
        <version>3.0.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>com.sshtools</groupId>
        <artifactId>maverick-bc</artifactId>
        <version>3.0.0-SNAPSHOT</version>
    </dependency>

您还需要以下快照存储库,因为目前还没有正式发布 API:

    <repository>
        <id>oss-snapshots</id>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>

首先,您可以使用以下方法加载新的 OpenSSH 私钥格式:

SshKeyPair key = SshKeyUtils.getPrivateKey(
          new File("id_rsa"), "passphrase");

然后您可以通过将其传递到较旧的格式实现并通过 getFormattedKey 方法检索文本来转换它。

System.out.write(new OpenSSHPrivateKeyFileBC(
          key, "passphrase").getFormattedKey());

作为此答案的一些背景知识并声明我是推荐项目的开发人员,Maverick Synergy 是第三代 API,它继承了 J2SSH Maverick 和 Maverick Legacy 商业 API。 Maverick Synergy 作为开源产品完全可用,获得 LGPL 许可。

【讨论】:

  • 是否可以将任何私钥转换为 RSA 格式?
  • 两种格式之间只能转换RSA私钥
  • 随着新版本 3.0.0-RC1 的类 com.sshtools.common.publickey.OpenSSHPrivateKeyFileBC 移动到 com.sshtools.common.publickey.bc.OpenSSHPrivateKeyFileBC
猜你喜欢
  • 2013-07-17
  • 2011-10-22
  • 2021-07-14
  • 2022-07-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
相关资源
最近更新 更多