是否可以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_Protocol,http://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 关联很可能不可用。