如何在 python 容器中启用 TLS 1.0?
How to enable TLS 1.0 in python container?
我需要连接到使用 TLS 1.0 的旧 FTP 服务器。我正在尝试在我的容器中启用 TLS 1.0 支持,但没有成功。
环境:docker
图片:python:latest
到目前为止我做了什么:
在 /etc/ssl/openssl.cnf
中将 MinProtocol
更改为 TLS_v1.0
:https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1358
在我的代码中将 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()
我需要连接到使用 TLS 1.0 的旧 FTP 服务器。我正在尝试在我的容器中启用 TLS 1.0 支持,但没有成功。
环境:docker
图片:python:latest
到目前为止我做了什么:
在
/etc/ssl/openssl.cnf
中将MinProtocol
更改为TLS_v1.0
:https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1358在我的代码中将
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()