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

时间:2014-02-22 06:50:59

标签: 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)当程序第一次启动时,程序将生成一个自签名证书。此证书将与此程序一起使用,直到证书过期或被删除。

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

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

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

几个问题:

1)概述有什么问题(我确定有)?

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

3)这些生成的证书的期满时限是多少?

非常感谢你们!

1 个答案:

答案 0 :(得分:1)

你会发现这个包装程序(在C中)很有用:

您的计划中存在关于SSL证书初始交换的安全漏洞。您的协议容易受到SSL尝试阻止的中间人攻击。使用Diffie-Hellman可以稍微改善这种情况,但基本上不能解决问题。这就是所有主要操作系统/浏览器附带许多SSL证书的原因。

更新

我建议您只使用Stunnel,因为如果您不确定使用SSL可以做什么,那么从一开始就编写服务器端和客户端都太麻烦了。 Stunnel是一个功能完整的(包括相互(也称为双向)身份验证)和OpenSSL用户软件的经过实战验证的示例。

我认为您需要以下步骤:

  1. 使用Stunnel连接到https://www.google.com/
  2. 使用Stunnel运行带有自签名证书的本地SSL服务器
  3. 使用Stunnel连接到2。
  4. 使用Python SSL连接到2。
  5. 使用Python SSL运行带有自签名证书的本地SSL服务器
  6. 使用Python SSL连接到5。
  7. 然后,您将了解项目所需的操作顺序。我很难想象由于缺乏Stunnel的功能你会遇到问题。如果您遇到Stunnel问题,那么很可能是SSL的固有限制,切换到Python SSL后,您将无法免除它。

    更新2

    从Stunnel开始,openssl s_clientopenssl s_server可能更好。它们是一种“SSL telnet”。

相关问题