通过安全连接使用 Redis

Posted

技术标签:

【中文标题】通过安全连接使用 Redis【英文标题】:Using Redis over secured connection 【发布时间】:2014-01-28 14:02:04 【问题描述】:

我有一个远程 Linux 机器,运行 Redis 服务器,侦听一个开放端口。 我想加密流量,但 Redis 不支持 SSH。 建议的解决方案是使用 SSH 隧道,但我对此没有太多经验。

我尝试将 RedisClient (ServiceStack.Redis) 对象连接到通过 SSH (SSH.NET) 隧道转发到远程 linux 机器的本地端口:

static void Main(string[] args)
    
        using (var client = new SshClient("example.org", "sshuser", "sshpassword"))
        
            client.Connect();
            var port = new ForwardedPortLocal("localhost", 1234, " example.org ", 1234);
            client.AddForwardedPort(port);
            port.Exception += (sender, e) => Console.WriteLine(e.Exception.ToString());
            port.Start();
            using (var redisClient = new RedisClient("localhost", 1234, "redispassword"))
            
                var values = redisClient.As<string>();
                const string dansFord = "Dan's Ford Mustang";
                values.Store(dansFord);
                Console.WriteLine("Redis has " + values.GetAll().Count + " entries");
                values.GetAll().ToList().ForEach(Console.WriteLine); 
            
            Console.ReadLine();
            port.Stop();
            client.Disconnect();
        
    

这不起作用,因为 RedisClient 无法连接到 localhost 上不存在的服务器,并且转发似乎不起作用。我的问题是:

    是否可以使用 SSH.NET 的 SSH 隧道进行 Redis客户端? 我只是使用了 SshClient 错误吗? 是否有更简单的方法来完成与 远程 Redis 服务器?

我不能应用任何操作系统级别的调整,所以解决方案应该是纯 .NET 到 4.5.1。 here 发布的解决方案需要商业图书馆,而我必须依赖免费的。

谢谢!

【问题讨论】:

查看***.com/questions/16789727/… 了解使用 Java 的示例。 【参考方案1】:

答案:

    RedisClient 是否可以使用 SSH.NET 的 SSH 隧道? 是的 我只是使用了错误的 SshClient 吗? 是的 是否有更简单的方法来完成与远程 Redis 服务器的加密连接? 我不这么认为。 Redis suggests 使用 SSL 代理,但这似乎更复杂

顺便说一句,您的代码在经过一些更改后可以正常工作。

使用“127.0.0.1”而不是“localhost”。

使用 localhost 可能会导致问题,因为 localhost 可以解析为端口转发可能不支持的 IPv6 地址..?

端口转发应该这样设置:

var port = new ForwardedPortLocal("127.0.0.1", 42421, "127.0.0.1", 第6379章;

42421 是本地计算机上的一个端口。它必须可用。发送到此端口的所有流量都将被转发。

6379 是远程服务器上 redis 服务器正在监听的端口。

与redis客户端连接时,使用IPv4地址:

var redisClient = new RedisClient("127.0.0.1", 42421)

42421 与您在上面用于转发的端口相同。

【讨论】:

我以为我什么都试过了,但当然不是很明显。无论如何谢谢;)

以上是关于通过安全连接使用 Redis的主要内容,如果未能解决你的问题,请参考以下文章

关于TCP全连接队列和半连接队列

全连接理解2

全外连接与全连接

你知道TCP的半连接与全连接队列吗?

Redis配置文件参数说明

MySql连接——内连接外连接(左连接右连接全连接)