使用 openssl s_server 作为反向代理

使用 openssl s_server 作为反向代理

是否可以openssl s_server通过将握手后的所有数据转发到不同的端口来用作一种反向代理。

更具体地说,我想创建一个简单的tftp-over-dtls用于测试目的的设置。

答案1

不它不是。

因为 openssl s_server 只执行 TCP,如输出中提到的man s_server

DESCRIPTION
       The s_server command implements a generic SSL/TLS server which listens for connections on a given port using SSL/TLS.

OPTIONS
       -accept port
           the TCP port to listen on for connections. If not specified 4433 is used.

TFTP 使用 UDP(参见https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocolhttp://www.faqs.org/rfcs/rfc1350.html),所以我看不出你该如何让它工作。

然而,nginx 也许能够完成您所寻找的事情。

根据 /etc/services,TFTPS 存在 IANA 分配,但我找不到有关它的 RFC 或其他文档。

编辑

正如评论中指出的那样 - s_server 确实(在某些 openSSL 版本中,例如 1.1.0)支持 DTLS:https://www.openssl.org/docs/man1.1.0/apps/s_server.html

但并非所有 openSSL 版本都是这种情况 - 1.0.2(https://www.openssl.org/docs/man1.0.2/apps/s_server.html) 和 1.0.1 (https://www.openssl.org/docs/man1.0.1/apps/s_server.html) 不支持 DTLS。

答案2

是的,使用足够新的 OpenSSL 和 Bash,您可以将“s_server”命令的输入和输出重定向到套接字。在(代理)服务器上,您可以运行:

exec 3<> /dev/udp/mytftpserver.com/69; openssl s_server -dtls -port 1069 \
  -key x.key -cert x.cert -quiet <&3 >&3

在客户端,开始使用支持 DTLS 的 TFTP 客户端与代理服务器端口 1069 进行通信:

openssl s_client -dtls -connect myproxyserver.com:1069

然而对于 TFTP,实际的文件传输将源自 69 以外的端口,因此当时建立的 DTLS 关联很可能不可用。

相关内容