Use RSA for ssh server
[netconf.git] / netconf / netconf-ssh / src / main / java / org / opendaylight / netconf / ssh / NetconfNorthboundSshServer.java
index 300e19f594368cd7d224fe7da4aa23dde88a81e0..72878b1e6caa13f8cee77235c4cd21783cdcc6c8 100644 (file)
@@ -14,11 +14,11 @@ import io.netty.util.concurrent.EventExecutor;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
-import java.net.UnknownHostException;
 import java.util.concurrent.Executors;
 import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider;
 import org.opendaylight.netconf.api.NetconfServerDispatcher;
 import org.opendaylight.netconf.auth.AuthProvider;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
 import org.slf4j.Logger;
@@ -28,6 +28,10 @@ public class NetconfNorthboundSshServer {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfNorthboundSshServer.class);
 
+    private static final String DEFAULT_PRIVATE_KEY_PATH = "./configuration/netconf-mdsal-nb/RSA.pk";
+    private static final String DEFAULT_ALGORITHM = "RSA";
+    private static final int DEFAULT_KEY_SIZE = 4096;
+
     private final ChannelFuture localServer;
     private final SshProxyServer sshProxyServer;
 
@@ -50,7 +54,8 @@ public class NetconfNorthboundSshServer {
         sshProxyServerConfigurationBuilder.setLocalAddress(localAddress);
         sshProxyServerConfigurationBuilder.setAuthenticator(authProvider);
         sshProxyServerConfigurationBuilder.setIdleTimeout(Integer.MAX_VALUE);
-        sshProxyServerConfigurationBuilder.setKeyPairProvider(new PEMGeneratorHostKeyProvider());
+        sshProxyServerConfigurationBuilder.setKeyPairProvider(new PEMGeneratorHostKeyProvider(DEFAULT_PRIVATE_KEY_PATH,
+                DEFAULT_ALGORITHM, DEFAULT_KEY_SIZE));
 
         localServer.addListener(future -> {
             if (future.isDone() && !future.isCancelled()) {
@@ -67,15 +72,10 @@ public class NetconfNorthboundSshServer {
         });
     }
 
-    private InetSocketAddress getInetAddress(final String bindingAddress, final String portNumber) {
-        try {
-            IpAddress ipAddress = IpAddressBuilder.getDefaultInstance(bindingAddress);
-            final InetAddress inetAd = InetAddress.getByName(ipAddress.getIpv4Address() == null
-                    ? ipAddress.getIpv6Address().getValue() : ipAddress.getIpv4Address().getValue());
-            return new InetSocketAddress(inetAd, Integer.valueOf(portNumber));
-        } catch (final UnknownHostException e) {
-            throw new IllegalArgumentException("Unable to bind netconf endpoint to address " + bindingAddress, e);
-        }
+    private static InetSocketAddress getInetAddress(final String bindingAddress, final String portNumber) {
+        IpAddress ipAddress = IpAddressBuilder.getDefaultInstance(bindingAddress);
+        final InetAddress inetAd = IetfInetUtil.INSTANCE.inetAddressFor(ipAddress);
+        return new InetSocketAddress(inetAd, Integer.parseInt(portNumber));
     }
 
     public void close() {