gpt4 book ai didi

python - 在 python 2.7.* 中使用 TLS1.2 和 ftplib

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:31 24 4
gpt4 key购买 nike

我需要连接到需要 TLS 1.2 的 ftp 服务器

ftplib 有一个名为 FTP_TLS.ssl_version 的对象,但我不能选择 ssl.PROTOCOL_TLSv1_2,因为它仅在 Python 3.4 中可用,并且将在 python 2.7.9 中可用,该版本在本文中尚未发布。

我无法更改我的程序以使用 Python 3.4,那么我有什么选择呢?

最佳答案

可以假设默认设置应该已经连接到尽可能最好的 TLS 版本。对 TLS1.2 的显式设置仅意味着客户端不会接受服务器返回的低于 TLS1.2 的任何内容。

不幸的是,ftplib 决定将版本硬编码为 TLSv1,从而减少与 TLS 1.0 的连接,即使 OpenSSL 会支持更好的版本。由于旧的 python 版本无法明确请求 TLS 1.1 或 TLS 1.2,因此您需要请求 SSLv23,它会自动请求可能的最佳版本:

import ssl
from ftplib import FTP_TLS
ftps = FTP_TLS('127.0.0.1')

## set protocol to SSLv23 to request best version
ftps.ssl_version = ssl.PROTOCOL_SSLv23;

ftps.login()
ftps.prot_p()
ftps.retrlines('LIST')
ftps.quit()

正常使用 ftplib 的唯一变化是将 ssl_version 设置为 ssl.PROTOCOL_SSLv23,因此它将请求尽可能最好的版本。如果这将是 TLS 1.2,则取决于服务器和客户端支持的版本。 Ubuntu TLS 1.2 在客户端被禁用,直到版本 13.10,因此它将最多使用 TLS 1.1。对于 Ubuntu 14.04,如果服务器支持,它将使用 TLS 1.2。

此更改的副作用是它不会向 FTP 服务器发送 AUTH TLS 命令,而是发送旧的 AUTH SSL 命令,但大多数服务器会可能不在乎。另一个副作用是如果服务器不支持更好的东西,它也将允许 TLS 1.0 或 SSL 3.0。如果你不想要这个,你必须摆弄 SSL 上下文选项,但看起来这只适用于 python3。

关于python - 在 python 2.7.* 中使用 TLS1.2 和 ftplib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26731517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com