如何在 python 容器中启用 TLS 1.0?

How to enable TLS 1.0 in python container?

我需要连接到使用 TLS 1.0 的旧 FTP 服务器。我正在尝试在我的容器中启用 TLS 1.0 支持,但没有成功。

环境:docker
图片:python:latest

到目前为止我做了什么:

  1. /etc/ssl/openssl.cnf 中将 MinProtocol 更改为 TLS_v1.0https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1358

  2. 在我的代码中将 ssl_version 设置为 PROTOCOL_TLSv1

#!/usr/local/bin/python
import ftplib
import ssl
from ftplib import FTP_TLS

ftplib.FTP_TLS.ssl_version = ssl.PROTOCOL_TLSv1
ftp = FTP_TLS('...')
ftp.login('...', '...')
ftp.retrlines('LIST')

ftp.quit()

我收到这个错误:

  File "/usr/local/lib/python3.10/ftplib.py", line 745, in login
    self.auth()
  File "/usr/local/lib/python3.10/ftplib.py", line 756, in auth
    self.sock = self.context.wrap_socket(self.sock, server_hostname=self.host)
  File "/usr/local/lib/python3.10/ssl.py", line 512, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/local/lib/python3.10/ssl.py", line 1070, in _create
    self.do_handshake()
  File "/usr/local/lib/python3.10/ssl.py", line 1341, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: NO_CIPHERS_AVAILABLE] no ciphers available (_ssl.c:997)

我应该如何(如果有的话)在 python 容器中使用旧的 TLS 版本?

... no ciphers available

这不是TLS版本的问题,而是可用密码的问题。因此,仅设置较低的协议版本无济于事。目前还不清楚服务器支持什么密码,甚至这些密码是否被编译到您使用的 OpenSSL 版本中 Python。例如 RC4 通常不再编译。

但很可能默认情况下仅禁用必要的密码,默认情况下通常会设置更高的安全级别。在这种情况下,它可能有助于降低安全级别,这也会处理 TLS 版本

#!/usr/local/bin/python
import ftplib
import ssl
from ftplib import FTP_TLS

ctx = ssl.create_default_context()
ctx.set_ciphers('DEFAULT:@SECLEVEL=1') # enables weaker ciphers and protocols
ftp = FTP_TLS(context=ctx)
ftp.set_debuglevel(10)
ftp.connect('...',21)
ftp.login('...','...')
ftp.quit()