socat openssl-listen - 确保正在使用 TLSv1.3

socat openssl-listen - ensuring TLSv1.3 is in use

我有一个工作 client/server 场景,使用 socat 和以下命令:

服务器

socat openssl-listen:5000,reuseaddr,cert=server.pem,cafile=server.crt,verify=0 STDIO

客户端

socat stdio openssl-connect:localhost:5000,cert=server.pem,cafile=server.crt,verify=0

这是一个更大系统的一部分,但上面的命令对我们想要实现的目标很有效。但是,我需要确保正在使用 TLS v1.3,并确保它是唯一使用的加密版本。我可以确保使用类似以下内容的 1.2 版:

socat - OPENSSL-LISTEN:443,method=TLS1.2,verify=0,cert=cert.pem,key=key.pem

openssl是最新的(1.1.1版本),应该支持TLS1.3

在撰写本文时(2020 年 2 月),我能找到的几乎所有关于 socat 的文档都只提到了设置 TLS1.2,而没有提到 TLS1.3。对于openssl命令行,可以设置-tls1_3,例如:

openssl s_server -accept 443 -tls1_3 -ciphersuites TLS_AES_256_GCM_SHA384 -key key.pem -cert cert.pem

[1] https://8gwifi.org/docs/tlsv13.jsp

此命令有效(连同相关的 s_client 命令),但我无法获得通过 socat 传入的相同参数。

socat 版本 1.7.4.0 及更高版本支持选项 openssl-min-proto-version[1],其有效值为 TLS1.3。这将强制使用 TLS v1.3 或更高版本。

因此您的命令将变为:

服务器

socat openssl-listen:5000,reuseaddr,cert=server.pem,cafile=server.crt,verify=0,openssl-min-proto-version=TLS1.3 STDIO

客户

socat stdio openssl-connect:localhost:5000,cert=server.pem,cafile=server.crt,verify=0,openssl-min-proto-version=TLS1.3

请注意,这并不强制完全 使用 TLS v1.3。为此,请将 ,openssl-max-proto-version=TLS1.3 附加到选项列表(以便 minmax 都等于 TLS1.3)。

[1] https://fossies.org/linux/socat/CHANGES