2014-11-04 5 views
1

내가 TLS 1.2파이썬 2.7에서 FTPLIB와 TLS1.2를 사용. *

FTPLIB을 필요로하는 FTP 서버에 연결할 필요는 FTP_TLS.ssl_version라는 개체를 가지고 있지만 나는 ssl.PROTOCOL_TLSv1_2을하기 때문에 선택할 수 없습니다 그 Python 3.4에서만 사용 가능하며이 게시물에서는 공개되지 않는 Python 2.7.9에서 사용할 수 있습니다.

파이썬 3.4를 사용하도록 프로그램을 변경할 수있는 방법이 없으므로 어떤 옵션이 있습니까?

답변

2

기본값이 이미 가능한 최상의 TLS 버전으로 연결되어 있다고 가정 할 수 있습니다. TLS1.2를 명시 적으로 설정한다는 것은 클라이언트가 서버에서 TLS1.2 이하의 것을 받아들이지 않는다는 것을 의미합니다.

불행히도 ftplib은 버전을 TLSv1로 하드 코딩하기로 결정하여 OpenSSL이 더 나은 버전을 지원하더라도 TLS 1.0에 대한 연결을 줄입니다.

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을 설정하는 것입니다 : 명시 적으로 자동으로 최상의 버전을 요청 SSLv23을 요청해야 TLS 1.1 또는 TLS 1.2를 요청하기 이전의 파이썬 버전과 방법이 없기 때문에 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에서만 사용할 수있는 것처럼 보입니다.

+0

우분투 힌트 주셔서 감사합니다. 그게 문제가 될 수 있습니다! 14.04로 업그레이드하고 사용해보십시오. – W0bble

+0

불행히도 이것은 문제를 해결하지 못했습니다. 우분투와도 tls 1.2에 연결할 수 없습니다. 14.04 – W0bble

+0

@ W0bble : TLS 1.0 만 사용하도록 하드 코딩 된 설정을 수정하는 방법에 대한 편집을 참조하십시오. –

관련 문제