首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python连接到FTPS

用Python连接到FTPS
EN

Stack Overflow用户
提问于 2017-09-29 14:09:24
回答 1查看 2.9K关注 0票数 0

我试图连接到一个FTPS服务器,它需要使用.pfx证书进行匿名登录。

我已经收到了关于如何通过gui应用程序SmartFTP访问它的指导,这样我就知道我没有防火墙问题等等。但是,对于这个工作流来说,通过python访问它是理想的。以下是我得到的设置:

代码语言:javascript
复制
Protocol: FTPS (Explicit)
Host: xxx.xxx.xxx.xxx
Port: 21
login type: Anonymous
Client Certificate: Enabled (providing a .pfx file)
Send FEAT: Send before and after login

我在使用.pfx证书的完整示例中选择最适合这个功能的python模块时遇到了问题。目前,我只尝试使用以下代码的标准FTP模块。有人有一个有用的例子吗?

代码语言:javascript
复制
from ftplib import FTP_TLS

    ftps = FTP_TLS(host='xxx.xxx.xxx.xxx',
                   keyfile=r"/path/to.pfx"
                   )
    ftps.login()
    ftps.prot_p()
    ftps.retrlines('LIST')
    ftps.quit()

使用上面的代码我得到:

代码语言:javascript
复制
ValueError: certfile must be specified

客户端版本: Ubuntu == 14.04,Python3.6.2

更新

认为我对下面的代码有一点了解,但是得到了一个新的错误:

代码语言:javascript
复制
from ftplib import FTP_TLS
import tempfile
import OpenSSL.crypto


def pfx_to_pem(pfx_path, pfx_password):
    """ Decrypts the .pfx file to be used with requests. """
    with tempfile.NamedTemporaryFile(suffix='.pem') as t_pem:
        f_pem = open(t_pem.name, 'wb')
        pfx = open(pfx_path, 'rb').read()
        p12 = OpenSSL.crypto.load_pkcs12(pfx, pfx_password)
        f_pem.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, p12.get_privatekey()))
        f_pem.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, p12.get_certificate()))
        ca = p12.get_ca_certificates()
        if ca is not None:
            for cert in ca:
                f_pem.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, cert))
        f_pem.close()
        yield t_pem.name


pfx = pfx_to_pem(r"/path/to.pfx", 'password')
ftps = FTP_TLS(host='xxx.xxx.xxx.xxx',
               context=pfx
               )
ftps.login()
ftps.prot_p()
# ftps.prot_c()
print(ftps.retrlines('LIST'))
ftps.quit()

错误: ftplib.error_perm: 534服务器上的本地策略不允许TLS安全连接。

有什么想法吗?

干杯

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 14:33:14

听起来你想做SFTP。SSL上的FTP与SFTP不一样。据我所知,SFTP (与SSH相关)在标准库中是不可能的。

有关Python:SFTP in Python? (platform independent)中的SFTP的更多信息,请参见以下内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46490614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档