Unix 管道上的 TLS

Ela*_*ich 6 pipe ssl openssl 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
Run Code Online (Sandbox Code Playgroud)

(是的,编写一个简短的程序来做到这一点并不难,但我希望现有工具可以实现)

让我澄清一下,我不希望在此过程中的任何时候都建立 tcp 连接。我想通过 UNIX 管道使用 TLS/SSL 协议。客户端将打开一个 unix 管道,并将连接到另一个管道上的服务器“侦听”。我不想将数据从 TLS tcp 连接移动到管道。

jof*_*fel 4

您可以使用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
Run Code Online (Sandbox Code Playgroud)

socat有很多功能,所以你也许可以完全避免使用管道。

编辑-u向服务器的 socat 添加了(单向)选项 - 没有它,管道将用作回服务。