Unix 管道上的 TLS

Unix 管道上的 TLS

我可以通过 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 添加了(单向)选项 - 没有它,管道将用作回声服务。

相关内容