Author: hadrian Date: Fri Jun 15 02:29:59 2012 New Revision: 1350451 URL: http://svn.apache.org/viewvc?rev=1350451&view=rev Log: CAMEL-5242. Add support for pki based auth in camel-jsch
Added: camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.priv camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.pub Modified: camel/branches/camel-2.9.x/components/camel-jsch/src/main/java/org/apache/camel/component/jsch/ScpOperations.java camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpServerTestSupport.java camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpSimpleProduceTest.java Modified: camel/branches/camel-2.9.x/components/camel-jsch/src/main/java/org/apache/camel/component/jsch/ScpOperations.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jsch/src/main/java/org/apache/camel/component/jsch/ScpOperations.java?rev=1350451&r1=1350450&r2=1350451&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-jsch/src/main/java/org/apache/camel/component/jsch/ScpOperations.java (original) +++ camel/branches/camel-2.9.x/components/camel-jsch/src/main/java/org/apache/camel/component/jsch/ScpOperations.java Fri Jun 15 02:29:59 2012 @@ -32,8 +32,9 @@ import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.UIKeyboardInteractive; import com.jcraft.jsch.UserInfo; + +import org.apache.camel.CamelExchangeException; import org.apache.camel.Exchange; -import org.apache.camel.InvalidPayloadException; import org.apache.camel.component.file.GenericFileEndpoint; import org.apache.camel.component.file.GenericFileOperationFailedException; import org.apache.camel.component.file.remote.RemoteFileConfiguration; @@ -44,8 +45,6 @@ import org.apache.camel.util.ObjectHelpe import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.apache.camel.util.ObjectHelper.isNotEmpty; - /** * SCP remote file operations */ @@ -107,7 +106,7 @@ public class ScpOperations implements Re try { write(channel, file, ExchangeHelper.getMandatoryInBody(exchange, InputStream.class), cfg); - } catch (InvalidPayloadException e) { + } catch (CamelExchangeException e) { throw new GenericFileOperationFailedException("Failed extract message body as InputStream", e); } catch (IOException e) { throw new GenericFileOperationFailedException("Failed to write file " + file, e); @@ -194,13 +193,21 @@ public class ScpOperations implements Re try { final JSch jsch = new JSch(); // get from configuration - if (isNotEmpty(config.getCiphers())) { + if (ObjectHelper.isNotEmpty(config.getCiphers())) { LOG.debug("Using ciphers: {}", config.getCiphers()); Hashtable<String, String> ciphers = new Hashtable<String, String>(); ciphers.put("cipher.s2c", config.getCiphers()); ciphers.put("cipher.c2s", config.getCiphers()); JSch.setConfig(ciphers); } + if (ObjectHelper.isNotEmpty(config.getPrivateKeyFile())) { + LOG.debug("Using private keyfile: {}", config.getPrivateKeyFile()); + if (ObjectHelper.isNotEmpty(config.getPrivateKeyFilePassphrase())) { + jsch.addIdentity(config.getPrivateKeyFile(), config.getPrivateKeyFilePassphrase()); + } else { + jsch.addIdentity(config.getPrivateKeyFile()); + } + } String knownHostsFile = config.getKnownHostsFile(); jsch.setKnownHosts(ObjectHelper.isEmpty(knownHostsFile) ? DEFAULT_KNOWN_HOSTS : knownHostsFile); Modified: camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpServerTestSupport.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpServerTestSupport.java?rev=1350451&r1=1350450&r2=1350451&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpServerTestSupport.java (original) +++ camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpServerTestSupport.java Fri Jun 15 02:29:59 2012 @@ -20,7 +20,9 @@ import java.io.File; import java.io.IOException; import java.security.Provider; import java.security.Provider.Service; +import java.security.PublicKey; import java.security.Security; +import java.util.Arrays; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; @@ -31,10 +33,14 @@ import org.apache.camel.test.AvailablePo import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.camel.util.FileUtil; import org.apache.sshd.SshServer; +import org.apache.sshd.common.NamedFactory; import org.apache.sshd.common.keyprovider.FileKeyPairProvider; +import org.apache.sshd.server.Command; import org.apache.sshd.server.PasswordAuthenticator; +import org.apache.sshd.server.PublickeyAuthenticator; import org.apache.sshd.server.command.ScpCommandFactory; import org.apache.sshd.server.session.ServerSession; +import org.apache.sshd.server.sftp.SftpSubsystem; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -116,10 +122,12 @@ public abstract class ScpServerTestSuppo } + @SuppressWarnings("unchecked") protected boolean startSshd() { sshd = SshServer.setUpDefaultServer(); sshd.setPort(getPort()); sshd.setKeyPairProvider(new FileKeyPairProvider(new String[]{"src/test/resources/hostkey.pem"})); + sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory())); sshd.setCommandFactory(new ScpCommandFactory()); sshd.setPasswordAuthenticator(new PasswordAuthenticator() { @Override @@ -128,7 +136,12 @@ public abstract class ScpServerTestSuppo return username != null && username.equals(password); } }); - + sshd.setPublickeyAuthenticator(new PublickeyAuthenticator() { + @Override + public boolean authenticate(String username, PublicKey key, ServerSession session) { + return true; + } + }); try { sshd.start(); return true; Modified: camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpSimpleProduceTest.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpSimpleProduceTest.java?rev=1350451&r1=1350450&r2=1350451&view=diff ============================================================================== --- camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpSimpleProduceTest.java (original) +++ camel/branches/camel-2.9.x/components/camel-jsch/src/test/java/org/apache/camel/component/jsch/ScpSimpleProduceTest.java Fri Jun 15 02:29:59 2012 @@ -81,4 +81,18 @@ public class ScpSimpleProduceTest extend // assertFalse("File should not have execute rights: " + file, file.canExecute()); assertEquals("Bonjour Monde", context.getTypeConverter().convertTo(String.class, file)); } + + @Test + public void testScpProducePrivateKey() throws Exception { + Assume.assumeTrue(this.isSetupComplete()); + + String uri = getScpUri() + "?username=admin&privateKeyFile=src/test/resources/camel-key.priv&privateKeyFilePassphrase=password&knownHostsFile=" + getKnownHostsFile(); + template.sendBodyAndHeader(uri, "Hallo Welt", Exchange.FILE_NAME, "welt.txt"); + + File file = new File(getScpPath() + "/welt.txt").getAbsoluteFile(); + assertTrue("File should exist: " + file, file.exists()); + // Mina sshd we use for testing ignores file perms; + // assertFalse("File should not have execute rights: " + file, file.canExecute()); + assertEquals("Hallo Welt", context.getTypeConverter().convertTo(String.class, file)); + } } Added: camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.priv URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.priv?rev=1350451&view=auto ============================================================================== --- camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.priv (added) +++ camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.priv Fri Jun 15 02:29:59 2012 @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,FE79F4F193EC9E78B2839E067ACAC37A + ++ruECi0mWj5y45zqJl3ombI2cLax6nhXKdYvVXgnlbAP7/l4q97870taCFun50n2 +XseA08mJohChSJ/+pcwABhpZspnsCMoorSg+MdQh1dUzz1kuLpWTz93rrobLU+V7 +mIkAsdBh0Blxv/O2oQ8F/2OVOrhsMUI3srMzQiBOFg5Cx4bPqdorvz8x8WT7LjOX +bRq3qwghbMDPyylE4uhp4WBkRSCDifUYtJ8aLTTSE4BJWbc+o+d9W6f0rL3hRkXt +adPP8cGaqKTRdvYsI63JpVu9ibzN3aAXA+hNWtVCk6enWyOBEgaovFQSbNhxhNJV +PNZ1C6CIEKocs6X8jpZWtYoULDU6B7d8USzUh2wX+iUdxhi3Bt7wiOQKoLXdwd8B +F0XCwyBMF7AruAStRl5nYP11QYGIMFyxAvAPK1oBB846QZumVjTjuM8CyL0BCptk +WAqT5iobU2JkXHu/Oa6HU1bKJmTkJEs7lh2uBjgOlht2OwjD4kQJ4sPo8cP+6QmH +foE424o6NmGUXPsZ4JOBKKWvZBu9WyAphvBNtb+yh5+gc+C7mgZHSRwdt2frV5pX +kwJg3VoojH/MEVeRWHo9wPxj0Hd1n6Cg/p1/pHkhut4vFpUKYlXNPN1UeKF1EZpR +cQnBT4NJjWDdpE9Yr+7nu+3f5N0pfUrNSGWFU6XzhQMw4778rR9TBgO0Og6Hbftz +ZUDV5XJJ3PDAgCY7s/PI1chjxUKF15KxBYlQOqXaY9JgYzlkH9aC43NywO66wtC9 +bv6HP48zX554+NStWHXuY4dJ02miynAjZ2zceXCyjEOTVbjAzI3rpdHW+9X7bcKf +-----END RSA PRIVATE KEY----- Added: camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.pub URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.pub?rev=1350451&view=auto ============================================================================== --- camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.pub (added) +++ camel/branches/camel-2.9.x/components/camel-jsch/src/test/resources/camel-key.pub Fri Jun 15 02:29:59 2012 @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDA62XKzYxxiNEsD3C2IaL89FLbL5/BUqni1VGK6OvuNWgc1jPYTuzhhqhZHMXkcWawi1odBV4gjZZo0cK3cLni8aBs2yqO9hD8ic1O6KAju7l3JHW6B/IIlx9UcwPXkSXfi9IXsW3Nznl/k2Q8F9OrTOqGNTkNTgwxzFr5DC4RWw== camel-t...@camel.apache.org