Python 安全直接连接文件传输程序

Python 安全直接连接文件传输程序,python,sockets,ssl,file-transfer,Python,Sockets,Ssl,File Transfer,我正在考虑做一个附带项目,它将涉及以标准的直接连接方式传输文件。为了澄清这一点,如果9.9.9.9想要将文件发送到10.10.10.10,那么10.10.10.10将在某个端口上侦听,然后9.9.9.9将能够使用安全连接连接到10.10.10.10 不幸的是,我对任何安全协议都没有什么背景知识,但我最近正在阅读双向SSL的工作原理。我正在考虑用Python编写这篇文章,这样我就可以使用Python SSL库了 我正试图提出一个如何传输文件的高层次概述。我想到了以下几点: 1) 当程序第一次启动时

我正在考虑做一个附带项目,它将涉及以标准的直接连接方式传输文件。为了澄清这一点,如果9.9.9.9想要将文件发送到10.10.10.10,那么10.10.10.10将在某个端口上侦听,然后9.9.9.9将能够使用安全连接连接到10.10.10.10

不幸的是,我对任何安全协议都没有什么背景知识,但我最近正在阅读双向SSL的工作原理。我正在考虑用Python编写这篇文章,这样我就可以使用Python SSL库了

我正试图提出一个如何传输文件的高层次概述。我想到了以下几点:

1) 当程序第一次启动时,程序将生成一个自签名证书。此证书将与此程序一起使用,直到证书过期或被删除

2) 用户A想向用户B发送一个文件。假设他们从未在彼此之间传输过文件。B必须在某个端口上安装SSL侦听套接字。A将尝试连接到B

3) 当A试图连接到B时,双方都会被警告他们从未连接过对方。如果双方选择继续,他们将在各自的机器上存储彼此的证书。将来,如果A希望向B发送文件,或者反之亦然,程序将不会警告他们,因为他们拥有彼此的证书

4) A现在可以将文件发送给B

有几个问题:

1) 概述有什么问题吗(我肯定有问题)

2) 除了客户端可以访问侦听器的证书外,双向SSL还允许侦听器访问客户端的证书,对吗

3) 对于这些生成的证书,什么是有效的过期时间限制(如果有)


非常感谢你们

您会发现此包装程序(C)非常有用:

您的程序中存在与SSL证书的初始交换有关的安全漏洞。您的协议容易受到SSL试图阻止的中间人攻击。使用Diffie Hellman会稍微改善情况,但不会从根本上解决问题。这就是为什么所有主要的OS/浏览器都附带许多SSL证书的原因

更新 我建议您只使用Stunnel,因为当您不确定如何使用SSL时,从一开始就编写服务器端和客户端对您来说太多了。Stunnel是OpenSSL用户软件的一个功能完整(包括相互(也称为双向)身份验证)和战斗验证示例

我认为您需要以下步骤:

  • 使用Stunnel连接到
  • 使用Stunnel使用自签名证书运行本地SSL服务器
  • 使用Stunnel连接到2
  • 使用Python SSL连接到2
  • 使用Python SSL运行带有自签名证书的本地SSL服务器
  • 使用Python SSL连接到5
  • 然后,您将了解项目所需的操作顺序。我很难想象你会有一个问题,因为缺乏特技功能。如果您对Stunnel有问题,很可能是SSL固有的限制,在切换到Python SSL之后,您将无法摆脱它

    更新2
    与Stunnel相比,从
    openssl s_客户端
    openssl s_服务器
    开始可能更好。它们是一种“SSL telnet”。

    scp有什么问题吗??这不需要该程序的运行者创建一个新的系统级用户吗?我想避免这样。特别是在OSX上运行这个程序,因为在OSX上的程序通常是以自包含的形式分发的,并且在第一次运行程序时不需要root(我希望这个程序能够跨平台工作)是的,我认为它可能容易受到MITM攻击。它们是SSL试图通过证书链避免MITM的方式,对吗?我将使用Python的ssl.getpeercert()方法获取对方的证书。文档中没有说明,但我假设证书是以明文形式发送的?对于stunnel,您是否建议使用它而不是使用Python库?我想我不知道这比图书馆有什么优势。这个图书馆似乎使用起来很简单。非常感谢!