0

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

环境:docker
图片:python:latest

到目前为止我做了什么:

  1. 更改MinProtocol为: httpsTLS_v1.0 : //github.com/SoftEtherVPN/SoftEtherVPN/issues/1358/etc/ssl/openssl.cnf

  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 版本?

4

1 回答 1

2

...没有可用的密码

这不是 TLS 版本的问题,而是可用密码的问题。因此,仅设置较低的协议版本无济于事。目前尚不清楚服务器支持哪些密码,以及这些密码是否已编译到您从 Python 使用的 OpenSSL 版本中。例如 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()
于 2022-01-04T09:55:58.053 回答