【发布时间】:2016-05-16 14:53:25
【问题描述】:
当我使用 ftplib 连接时,如何检查 FTP 服务器是否允许 TLS?我找到了关于如何使用 TLS 的简单文档,但没有关于如何检查它的解决方案。我的脚本应该以任何一种方式连接,但如果可能,请使用 TLS。
那么我是否只使用 TLS 进行连接,如果它失败了,我就不用了吗?我相信一定有更好的方法。
感谢您的帮助。
【问题讨论】:
当我使用 ftplib 连接时,如何检查 FTP 服务器是否允许 TLS?我找到了关于如何使用 TLS 的简单文档,但没有关于如何检查它的解决方案。我的脚本应该以任何一种方式连接,但如果可能,请使用 TLS。
那么我是否只使用 TLS 进行连接,如果它失败了,我就不用了吗?我相信一定有更好的方法。
感谢您的帮助。
【问题讨论】:
请注意,仅尝试加密与根本不使用任何加密一样糟糕。甚至可能更糟,因为它给人一种安全的印象,而实际上并没有。
当您受到 MITM 攻击时,攻击者会将 TCP 流量转移给他/她并模拟加密拒绝,从而使您将凭据纯文本直接发送给攻击者。
无论如何:
拨打FTP_TLS.auth,检查是否抛出。
如果服务器支持 TLS,FTP_TLS.auth 将启用加密,FTP_TLS.login(即使使用secure=False)将继续使用它。如果服务器不支持加密,FTP_TLS.login(带有secure=False)继续不加密。
注意FTP_TLS.login(带有它的secure 参数)是一个未记录的方法——如果你不想使用它,你可以回退到创建一个普通的FTP,当FTP_TLS.auth 抛出时。
要明确检查,您还可以使用FTP.voidcmd('FEAT') 并在响应中查找AUTH TLS(或AUTH SSL)。
但是直接尝试AUTH TLS/AUTH SSL(FTP_TLS.auth 的作用)并没有错。
【讨论】:
secure=False 与调用记录在案的FTP.login(self, user = '', passwd = '', acct = '') 相同。