2014-11-04 48 views
1

我需要連接到需要TLS 1.2在Python 2.7使用TLS1.2與FTPLIB。*

的FTPLIB FTP服務器有一個名爲FTP_TLS.ssl_version的對象,但我不能選擇ssl.PROTOCOL_TLSv1_2因爲它僅在Python 3.4中可用,並且可以在python 2.7.9上使用,而這個版本並未發佈。

我沒有辦法改變我的程序使用Python 3.4,所以我的選擇是什麼?

回答

2

可以假定默認應該已經與最好的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_versionssl.PROTOCOL_SSLv23,因此它會要求最好的版本。如果這將是TLS 1.2,則取決於服務器和客戶端中支持的版本。使用Ubuntu TLS 1.2在客戶端版本13.10之前被禁用,所以它將最多使用TLS 1.1。使用Ubuntu 14.04,如果服務器支持它,它將使用TLS 1.2。

此更改的副作用是它不會將AUTH TLS命令發送到FTP服務器,而是發送較早的AUTH SSL命令,但大多數服務器可能不會在意。另一個副作用是,如果服務器不支持任何更好的功能,它還將允許TLS 1.0或SSL 3.0。如果你不想要這個,你不得不擺弄SSL上下文選項,但它看起來像只適用於python3。

+0

感謝Ubuntu提示。這可能是問題!將升級到14.04並嘗試。 – W0bble 2014-11-04 10:43:23

+0

不幸的是,這並沒有解決問題。無法連接到tls 1.2即使使用ubuntu 14.04 – W0bble 2014-11-12 15:34:12

+0

@ W0bble:請參閱編輯如何解決硬編碼設置以僅使用TLS 1.0。 – 2014-11-15 16:06:03