在客户端之间发送数据时,OpenVPN服务器是否对数据进行解密和重新加密?

亚历克西斯·威尔克(Alexis Wilke)

我们刚刚创建了一个由12个节点组成的集群,并希望为每台计算机之间的许多通信提供OpenVPN都必须100%安全(我们无法访问100%安全/专用环境,因此我们必须在计算机之间进行加密。 )

因此,我们有一个如下所示的设置:

             +------------------+
             |                  |
             |  OpenVPN Server  |
             |                  |
             +------------------+
                      ^
                      |
                +-----+------+----------------+----------+
                |            |                .          |
                |            |                .          |
                v            v                .          v
+------------------+  +------------------+  .....  +------------------+
|                  |  |                  |  .   .  |                  |
|  OpenVPN Client  |  |  OpenVPN Client  |  .   .  |  OpenVPN Client  |
|               A  |  |               B  |  .   .  |               n  |
+------------------+  +------------------+  .....  +------------------+

OpenVPN Server是12台计算机之一,我们注意到,每当任何客户端与另一个客户端通信时,它都会发疯。查看防火墙信息,我们可以清楚地看到客户端之间没有通信。相反,所有数据都发送到服务器,然后转发到另一个客户端(即,从客户端A到客户端B,我们看到传输是从A到Server,然后是Server到B。)

我想知道的是:

每当要向B发送数据时,A会获得B的公钥吗?我可以想象这不是因为OpenVPN客户端代码需要知道数据正在发送到B。所以,如果我理解正确的话,发生的事情是:

  1. 客户端A使用服务器公钥加密其数据。
  2. 客户端A将加密的Blob发送到服务器。
  3. 服务器使用其私钥来解密Blob。
  4. 服务器确定将Blob转发到的位置。
  5. 服务器使用客户端B的公钥重新加密数据。
  6. 服务器将该新加密的Blob发送给客户端。
  7. 客户端B使用其私钥来解密Blob。

换句话说,它看起来确实像这样:

             +------------------+
             |                  |
             |  OpenVPN Server  |<-----------------------+
             |                  |                        |
             +------------------+                        |
                ^       ^    ^                           |
                |       |    .                           |
                |       |    .                           |
                |       |    ..................          |
                |       |                     .          |
                v       v                     v          v
+------------------+  +------------------+  .....  +------------------+
|                  |  |                  |  .   .  |                  |
|  OpenVPN Client  |  |  OpenVPN Client  |  .   .  |  OpenVPN Client  |
|               A  |  |               B  |  .   .  |               n  |
+------------------+  +------------------+  .....  +------------------+

那是对的吗?我试图在文档中找到类似的内容,并且只能找到有关如何安装OpenVPN的信息(我们确实做到了,而且可以正常工作,但它看起来相当慢!比我预期的要慢得多。)

ysdx

是的,OpenVPN客户端-服务器配置看起来像第二张图。隧道位于OpenVPN服务器和OpenVPN客户端之间。OpenVPN服务器解密来自一个隧道的数据并将其加密到另一个隧道。

您可以使用对等体系结构而不是客户端-服务器体系结构使用OpenVPN来实现第一个图。您需要为网络中的每对计算机设置一个VPN隧道:每个节点有n个VPN隧道,总共n²个隧道(这不太方便)。

您对正在发生的事情的分析大部分是正确的,只有一部分。公钥/私钥不(直接)用于对进出隧道的数据包进行加密/解密。相反,它们用于验证隧道并协商用于实际加密/解密(和MAC)的对称会话密钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

客户端和服务器之间的ssh:服务器如何解密客户端发送给它的数据?

无法在Matlab中的UDP客户端和Linux中的服务器之间发送数据

通过袜子代理的 SSL 套接字 - 客户端 <---> 服务器数据是否加密?

RSA-客户端(在服务器上下文中)如何加密/解密传入的数据?

从客户端向服务器发送大量数据

客户端不向服务器发送数据

使用openssl在客户端/服务器中进行DES加密/解密

使用 express 从节点服务器向客户端 JavaScript 发送数据时出现错误

React 和 NodeJS:如何将数据从服务器发送到客户端?

在服务器和客户端套接字之间传输XML数据的最佳方法

客户端和服务器之间的同步和异步数据传输

Node.js:服务器和客户端之间的数据交换

Socket.io-在服务器和客户端之间同步数据

将客户端应用程序上的数据加密后再发送到服务器

SOCKS5客户端和代理服务器之间是否有加密?

在服务器上加密数据并在客户端上解密

在客户端和服务器端之间发送信息和变量

当SQL Server数据库是本地的时,ADO客户端游标与服务器端游标之间的区别?

Oracle 服务器数据库和 iOS 客户端应用程序之间的数据通信

加密客户端/解密服务器端 JS - PHP

客户端服务器加密

如何从服务器读取数据并将数据发送到客户端?

如何将客户端数据发送到服务器端

Angular2:发出请求时如何将数据从客户端发送到服务器

通过套接字从C ++服务器向Python客户端发送数据时出现问题

尝试在Python套接字中将数据从服务器发送到客户端时出现管道错误

将数据从客户端发送到服务器-REST Web服务

gRPC 中数据如何从客户端发送到(多服务)服务器

使用mORMot Framework在服务器和客户端之间发送消息