기본값이 이미 가능한 최상의 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에서만 사용할 수있는 것처럼 보입니다.
우분투 힌트 주셔서 감사합니다. 그게 문제가 될 수 있습니다! 14.04로 업그레이드하고 사용해보십시오. – W0bble
불행히도 이것은 문제를 해결하지 못했습니다. 우분투와도 tls 1.2에 연결할 수 없습니다. 14.04 – W0bble
@ W0bble : TLS 1.0 만 사용하도록 하드 코딩 된 설정을 수정하는 방법에 대한 편집을 참조하십시오. –