クライアント証明書を使用して FTPS サーバーに接続しようとしています。
私は2つの異なるサーバーで試しました(私は制御できませんが、それは非常に似ているはずです)。
接続が確立され、PWD コマンドが成功します。
1 つのサーバーでは LIST コマンドは成功しますが、2 番目のサーバーでは正しい結果 (ファイルのリスト) が生成されますが、その後 (明らかに SSL シャットダウン中に) エラーが生成されます。
サーバー側では、「あなたの LIST コマンドは正しく通っていますが、その後、新しい SSL 再ネゴシエーション中に接続が失われます」と言われました。
理由はありますか?
前もって感謝します。
.
接続を確立するための一般的なコマンド:
# Python 2.7.3rc2 (default, Apr 22 2012, 22:30:17)
>>> import ssl
>>> from ftplib import FTP_TLS
>>> ftps = FTP_TLS(keyfile="/path/to/***.key", certfile="/path/to/***.crt")
>>> ftps.set_debuglevel(2)
>>> ftps.ssl_version = ssl.PROTOCOL_TLSv1
>>> ftps.connect("***", 7806)
*get* '220 Welcome to Synchrony Gateway FTP server\r\n'
*resp* '220 Welcome to Synchrony Gateway FTP server'
'220 Welcome to Synchrony Gateway FTP server'
>>> ftps.auth()
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH command OK, waiting handshake\r\n'
*resp* '234 AUTH command OK, waiting handshake'
'234 AUTH command OK, waiting handshake'
>>> ftps.login("***", "***")
*cmd* 'USER ***'
*put* 'USER ***\r\n'
*get* '331 Send password please\r\n'
*resp* '331 Send password please'
*cmd* 'PASS ************'
*put* 'PASS ************\r\n'
*get* '230 User logged in, proceed\r\n'
*resp* '230 User logged in, proceed'
'230 User logged in, proceed'
>>> ftps.prot_p()
*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 Command okay\r\n'
*resp* '200 Command okay'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 Command okay\r\n'
*resp* '200 Command okay'
'200 Command okay'
>>> ftps.set_pasv(True)
>>> ftps.pwd()
*cmd* 'PWD'
*put* 'PWD\r\n'
*get* '257 "/" is current directory.\r\n'
*resp* '257 "/" is current directory.'
'/'
.
失敗する LIST コマンド:
>>> ftps.retrlines("LIST")
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Command okay\r\n'
*resp* '200 Command okay'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering passive mode (212,63,***,**,30,131).\r\n'
*resp* '227 Entering passive mode (212,63,***,**,30,131).'
*cmd* 'LIST'
*put* 'LIST\r\n'
*get* '125 List started\r\n'
*resp* '125 List started'
total 3
dr-xr-xr-x 0 --NA-- --NA-- 0 Apr 23 16:46 .
d--------- 0 --NA-- --NA-- 0 Jun 4 15:02 ..
dr-xr-xr-x 0 --NA-- --NA-- 0 Apr 23 16:46 **
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ftplib.py", line 721, in retrlines
conn.unwrap()
File "/usr/lib/python2.7/ssl.py", line 284, in unwrap
s = self._sslobj.shutdown()
socket.error: [Errno 0] Error
>>> ftps.pwd()
*cmd* 'PWD'
*put* 'PWD\r\n'
*get* '226 List completed\r\n'
*resp* '226 List completed'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/ftplib.py", line 575, in pwd
return parse257(resp)
File "/usr/lib/python2.7/ftplib.py", line 839, in parse257
raise error_reply, resp
ftplib.error_reply: 226 List completed
>>> ftps.quit()
*cmd* 'QUIT'
*put* 'QUIT\r\n'
*get* '257 "/" is current directory.\r\n'
*resp* '257 "/" is current directory.'
'257 "/" is current directory.'