【问题标题】:Secure direct-connect file transfer program安全直连文件传输程序
【发布时间】:2014-02-23 17:14:29
【问题描述】:

我正在考虑做一个涉及以标准直接连接方式传输文件的副项目。澄清一下,如果 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) 对于这些生成的证书,什么是好的到期时间限制(如果有的话)?

非常感谢你们!

【问题讨论】:

  • scp 有什么问题?
  • 那不需要这个程序的运行者创建一个新的系统级用户吗?我想避免这种情况。特别是在 OSX 上运行它,因为那里的程序通常是独立的,并且在第一次运行程序时不需要 root(我希望这个程序可以跨平台工作)

标签: python sockets ssl file-transfer


【解决方案1】:

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

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

更新

我建议您只使用 Stunnel,因为当您不确定如何使用 SSL 时,从一开始就编写服务器端和客户端的工作量太大。 Stunnel 是一个功能完整(包括相互(又名 2 路)身份验证)和经过实战验证的 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。

然后您将了解您的项目需要哪些操作顺序。我很难想象你会因为缺少 Stunnel 的功能而遇到问题。如果您在使用 Stunnel 时遇到问题,这很可能是 SSL 的固有限制,而在您切换到 Python SSL 后,您将无法摆脱它。

更新 2

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

【讨论】:

  • 是的,我认为它可能容易受到 MITM 攻击。 SSL 试图避免 MITM 的方式与证书链有关,对吗?我会使用 Python 的 ssl.getpeercert() 方法来获取对方的证书。文档没有说,但我认为证书是明文发送的?使用 stunnel,是否建议使用它而不是使用 Python 库?我想我对图书馆有什么优势感到困惑。该库似乎易于使用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 2017-04-15
  • 2016-02-09
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多