2017-02-14 3 views
0

Ich versuche, privaten Schlüssel aus einer .keystore-Datei, die ich erstellt habe, zu erhalten.Verwenden von privaten RSA-Schlüssel aus .keystore Datei mit Jsch

Bisher dies funktioniert:

 try { 
     FileInputStream is = new FileInputStream("C:\\Program Files\\Java\\...mykeystore.keystore"); 

     KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
     keystore.load(is, "mypassword".toCharArray()); 
     Key privKey = keystore.getKey("alias", "mypassword".toCharArray()); 

     StringWriter stringWriter = new StringWriter(); 
     JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter); 
     pemWriter.writeObject(privKey); 
     pemWriter.close(); 
     System.out.println(stringWriter); 

Für die System.out.println (String) bekomme ich die folgende Ausgabe:

----- BEGIN PRIVATE KEY RSA --- -

PRIVATE KEY IST HIER

----- END RSA PRIVATE KEY -----

Ich möchte jetzt diesen privaten Schlüssel verwenden, um eine SSH-Verbindung zu einem Unix-Server zu erstellen. Auf der Unix-Server-Seite habe ich den öffentlichen Schlüssel bereits in die authorized_key-Dateien eingefügt.

Für die SSH-Verbindung verwende ich JSch. Nach JSCH - Invalid private key muss ich jetzt diesen Schlüssel in PEM-Format konvertieren. Ich tat dies mit dem Beispiel von Abdelhameed Mahmoud:

 StringWriter stringWriter = new StringWriter(); 
     JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter); 
     pemWriter.writeObject(privKey); 
     pemWriter.close(); 
     System.out.println(stringWriter); 
     byte[] privateKeyPEM = stringWriter.toString().getBytes(); 

Und hier ist es, wo ich feststecke.

Wie kann ich das privateKeyPEM-Byte-Objekt verwenden? Ich möchte dies mit der jsch.addIdentity() verwenden

Aber ich verstehe nicht wirklich, wie ich dieses Byte verwenden kann [] privateKeyPEM Variable, um die Identität zu setzen?

Hier ist ein Beispiel für meine JSch Teil:

 JSch jsch = new JSch(); 
     jsch.addIdentity(**What to put here??**); 
     session = jsch.getSession(user, getIP(), getPort()); 
     session.setConfig("PreferredAuthentications", "publickey"); 
     //session.setPassword(pwd); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.connect(3000); 

Hat damit jemand Erfahrung?

Entschuldigung für die fehlenden Kommentare, wie ich noch herausfinden, wie das funktioniert, habe ich noch keine Kommentare hinzugefügt.

Vielen Dank im Voraus für hilfreiche Informationen.

Prost Armin

Antwort

2

Ist nichts darüber in der jsch Dokumentation?

Die Parameter sind:

JSch.addIdentity(String name, byte[] prvkey, byte[] pubkey, byte[] passphrase) 

In Ihrem Fall (unverschlüsselten PEM):

jsch.addIdentity(user, privateKeyPEM, null, null); 
+0

Hallo Omikron. Vielen Dank für Ihr Feedback. Ich war nur verwirrt in Bezug auf die Zeichenfolge/die Byte-Pubkey/Passphrase-Parameter, die Sie verwenden können. Aus einigen Gründen war ich dadurch verwirrt. Am Anfang habe ich immer einige seltsame Fehler bekommen, wahrscheinlich habe ich den falschen Benutzer als String bekommen. Wie auch immer, vielen Dank für Ihr Feedback. Damit funktioniert jetzt alles. Prost – ArBei

Verwandte Themen