我可以通过 Unix 命令行通过 Unix 管道使用 TLS/SSL 吗?
我想要相当于
$ mkfifo /tmp/spipe
$ echo a|openssl s_server -acceptFifo /tmp/spipe &
[1] 25563
$ openssl s_client -connectFifo /tmp/spipe
a
[1] Done echo a|openssl s_server -acceptFifo /tmp/spipe
(是的,编写一个简短的程序来做到这一点并不难,但我希望可以使用现有的工具来实现)
让我澄清一下,我不希望在此过程中的任何时候建立 TCP 连接。我想通过 UNIX 管道使用 TLS/SSL 协议。客户端将打开一个unix管道,并将连接到在另一个管道上“侦听”的服务器。我不想将数据从 TLS tcp 连接移动到管道。
答案1
您可以使用socat
。
#client
socat PIPE:/tmp/spipe OPENSSL:server:4443,cafile=server.crt,cert=client.pem
#server
socat -u OPENSSL-LISTEN:4443,reuseaddr,pf=ip4,fork,cert=server.pem,cafile=client.crt PIPE:/tmp/spipe
socat
有很多功能,所以你也许可以完全避免使用管道。
编辑:-u
向服务器的 socat 添加了(单向)选项 - 没有它,管道将用作回声服务。