ich habe folgendes Problem, über das ich schon länger grüble:
Ich will per Java eine SSH-Verbindung von einer Solaris-Maschine zu einer anderen erstellen, Authentifizierung läuft über Key und ist über Konsole kein Problem.
Ich benutze als SSH-Bibliothek ‘sshJ’ und als Securityprovider ‘BouncyCastle’, dies ist der Konstruktor meiner Klasse:
super(host);
Security.addProvider(new BouncyCastleProvider());
this.client = new SSHClient();
this.client.addHostKeyVerifier(fingerprint);
PKCS8KeyFile keyFile = new PKCS8KeyFile();
keyFile.init(new File(pathToKey));
this.client.authPublickey(userName, keyFile);```
Im entsprechenden JDK habe ich die Unrestricted-Policies-Jars eingesetzt.
Ich habe es lokal unter Windows getestet und es hat wunderbar funktioniert, alles kein Problem.
Aber sobald ich auf Solaris eine SSH-Verbindung damit öffnen will kommt folgender Fehler(Zielserver war sowohl auf Windows als auch unter Solaris derselbe):
```net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes128-cbc, arcfour, 3des-cbc, blowfish-cbc, aes192-ctr, aes192-cbc, aes256-ctr, aes256-cbc]
at net.schmizz.sshj.transport.Proposal.firstMatch(Proposal.java:165)
at net.schmizz.sshj.transport.Proposal.negotiate(Proposal.java:147)
at net.schmizz.sshj.transport.KeyExchanger.gotKexInit(KeyExchanger.java:239)
at net.schmizz.sshj.transport.KeyExchanger.handle(KeyExchanger.java:364)
at net.schmizz.sshj.transport.TransportImpl.handle(TransportImpl.java:477)
at net.schmizz.sshj.transport.Decoder.decode(Decoder.java:127)
at net.schmizz.sshj.transport.Decoder.received(Decoder.java:195)
at net.schmizz.sshj.transport.Reader.run(Reader.java:72)```
Hat jemand eine Idee woran das liegen könnte? (Schaut so aus, als ob die Maschinen sich nicht auf eine Encryption einigen können - aber warum?)
irgendwie fehlt die explizite angabe das BC zu verwenden ist , denn ohne diese wird der erste passende provider gewählt , und ich denke an genau diesem punkt dürfte sich was zwischen deinem win-client und dem solaris-server unterscheiden
irgendwo müsstest du an die lib auch die info übergeben können das BC zu verwenden ist
ansonsten bleibt dir nur über via reflections alle anderen vorher zu de-registrieren um sicherzugehen das auch wirklich BC genutzt wird
Ich habe den Code von sshj mal kurz auf github durchgesehen. Es wird dort gezielt abgefragt ob BouncyCastle schon registriert wurde und wenn nicht wird automatisch versucht BC zu registrieren. Von daher würde ich schonmal davon ausgehen das sshj BC verwenden wird wenn möglich.
Ich hatte auch zuerst vergessen die Policy-Jars auszutauschen und war von der Art des Fehlers auch recht überzeugt, dass das Austauschen das Problem lösen würde. Tat es leider nicht.
Da ja Win --> Solaris funktioniert nehme ich mal stark an, dass entweder sshJ oder BouncyCastle nicht ganz plattformunabhängig geschrieben ist.
Da wird als Defaultprovider irgendetwas anderes als der Standardprovider von Sun definiert (sun.security.provider.Sun). Auf der Website von BouncyCastle habe ich gelesen, dass dies zu Problemen führen könnte, wenn man das tut.
Ich habe die Lösung gefunden, trotz Tripplepost werde ich die Lösung getreu dem Motto ‘Sharing is caring’ posten.
Unter Solaris muss man im jeweiligen JDK oder JRE unter ‘lib/ext’ das jeweilige BouncyCastleProvider-Jar reinpacken, in meinem Fall ‘bcprov-jdk15on-1.49.jar’. Man braucht nichts in der ‘java.security’-Datei zu ändern.
Ich habe keine vernünftige Erklärung dafür, warum sich das JDK da unter Solaris anders verhält, ich habe die Lösung durch Ausprobieren gefunden.
ich glaube DAS ist irgendwie nicht wirklich die lösung
viel eher solltest du mal deinen classpath überprüfen das dieser die BC-lib auch mit einbindet anstatt einfach mal was ins lib/ext zu werfen
ist zwar das lindern des symptomes , nicht aber das beseitigen der ursache
naja, das einzige was ich mir jetzt noch vorstellen kann ist das BC an irgendeinem punkt “früher” geladen wird wenn es in lib/ext liegt als wenns normal im CP vorhanden ist
und das die ssh-lib halt genau darauf aufbaut
alles schon irgendwie sehr merkwürdig, vor allem weils unter win ja “normal” läuft ohne BC in lib/ext
kanns leider nicht nachvollziehen da ich solaris nicht zum laufen bekomme
entweder haut mir das graphische setup ne exception an kopf oder das text-setup hängt sich irgendwann auf
ich habs mitlerweile einfach aufgegeben