在 Twisted 中禁用 TLS 1.3 Python

Disable TLS 1.3 in Twisted Python

如何在 Twisted 服务器中禁用 TLS 1.3?这是我的代码,应该禁用 TLS 1.3,但没有:

from twisted.internet import ssl

ciphers = ssl.AcceptableCiphers.fromOpenSSLCipherString(
    "ECDHE-RSA-AES128-GCM-SHA256:AES128-SHA"
)

tls_options = ssl.CertificateOptions(
    privateKey=my_key,
    certificate=my_cert,
    extraCertChain=my_cert_chain,
    acceptableCiphers=ciphers,
    lowerMaximumSecurityTo=ssl.TLSVersion.TLSv1_2
)

listening_port = my_reactor.listenSSL(8000, my_factory, tls_options)

我添加了 lowerMaximumSecurityTo=ssl.TLSVersion.TLSv1_2 但这似乎禁用了 TLS 1.2 (!) 并使 TLS 1.3 可用。结果如下:

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      offered (deprecated)
 TLS 1.1    offered (deprecated)
 TLS 1.2    not offered and downgraded to a weaker protocol
 TLS 1.3    offered (OK): final

删除 lowerMaximumSecurityTo=ssl.TLSVersion.TLSv1_2 或更改为 TLSv1_3 后,TLS 1、1.1、1.2 和 1.3 均被报告为受支持。

我正在使用来自 https://testssl.sh/dev/

的 testssl.sh 3.1dev 进行测试

我正在使用 Ubuntu 18.04,包括他们的 Twisted、OpenSSL、Python3 等软件包

这是由于将旧的 Python OpenSSL 包与现代 OpenSSL 本机库混合所致。两者均由 Ubuntu 18.04 提供。修复是更新 Python OpenSSL 包,使用 PIP 而不是系统包。

为什么失败:

  • OpenSSL 本机库默认启用 TLS 1.3。
  • 旧 Python OpenSSL 包不公开关闭 TLS 1.3 所需的常量。
  • 现代 Twisted 检查 OpenSSL Python 包,发现它没有公开关闭 TLS 1.3 所需的常量,并错误地假设 OpenSSL 本机库不支持 TLS 1.3。它没有提供任何关于此的警告。