4 votes

Comment convertir une clé privée OpenSSH en clé privée RSA en Java ?

J'ai un fichier de clé privée au format OpenSSH :

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

mais j'en ai besoin au format RSA :

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

Sur le terminal, je ferais ceci :

ssh-keygen -p -m PEM -f mon-fichier-openssh

mais je dois le faire en Java.

J'ai essayé d'utiliser org.bouncycastle.openssl.PEMWriter, mais je n'arrive pas à comprendre comment convertir ma clé d'entrée (sous forme de chaîne d'entrée) en objet PrivateKey qui peut être passé au PEMWriter.

0 votes

Le format openssh est relativement nouveau et n'est pas pris en charge par grand-chose autre que openssh en ce moment.

0 votes

@JamesKPolk oui, c'est malheureusement exactement pourquoi je veux le convertir en RSA. La dernière version d'OSX Mojave génère par défaut des fichiers de clés openssh lorsque vous utilisez ssh-keygen, donc nous voyons beaucoup d'utilisateurs utiliser ces fichiers de clés par accident. Je veux les convertir automatiquement pour eux.

1voto

Lee David Painter Points 149

Ceci est en fait possible avec le Maverick Synergy Java SSH API.

Cette nouvelle branche de nos APIs SSH prend en charge le nouveau format de fichier de clé privée OpenSSH afin que vous puissiez charger la nouvelle clé et la convertir dans l'ancien format PEM pris en charge par BouncyCastle.

Vous aurez besoin des dépendances Maven suivantes :

        com.sshtools
        maverick-synergy-client
        3.0.0-SNAPSHOT

        com.sshtools
        maverick-bc
        3.0.0-SNAPSHOT

Vous aurez également besoin du dépôt snapshot suivant car il n'y a pas de version officielle de l'API pour le moment :

        oss-snapshots

            true

        https://oss.sonatype.org/content/repositories/snapshots/

Tout d'abord, vous pouvez charger le nouveau format de clé privée OpenSSH en utilisant :

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

Ensuite, vous pouvez le convertir en le passant dans l'implémentation du format plus ancien et en récupérant le texte via la méthode getFormattedKey.

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

En guise de contexte pour cette réponse et pour déclarer que je suis le développeur du projet recommandé, Maverick Synergy est une API de troisième génération qui a hérité des APIs commerciales J2SSH Maverick et Maverick Legacy. Maverick Synergy est entièrement disponible en tant que produit open source sous licence LGPL.

0 votes

Est-il possible de convertir n'importe quelle clé privée au format RSA?

0 votes

Seules les clés privées RSA peuvent être converties entre les formats

0 votes

Avec la nouvelle version 3.0.0-RC1, la classe com.sshtools.common.publickey.OpenSSHPrivateKeyFileBC a été déplacée vers com.sshtools.common.publickey.bc.OpenSSHPrivateKeyFileBC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X