我正在考虑做一个侧面项目,它涉及以标准的直接连接方式传输文件。为了澄清,如果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)这些生成的证书的期满时限是多少?
非常感谢你们!
答案 0 :(得分:1)
你会发现这个包装程序(在C中)很有用:
您的计划中存在关于SSL证书初始交换的安全漏洞。您的协议容易受到SSL尝试阻止的中间人攻击。使用Diffie-Hellman可以稍微改善这种情况,但基本上不能解决问题。这就是所有主要操作系统/浏览器附带许多SSL证书的原因。
我建议您只使用Stunnel,因为如果您不确定使用SSL可以做什么,那么从一开始就编写服务器端和客户端都太麻烦了。 Stunnel是一个功能完整的(包括相互(也称为双向)身份验证)和OpenSSL用户软件的经过实战验证的示例。
我认为您需要以下步骤:
然后,您将了解项目所需的操作顺序。我很难想象由于缺乏Stunnel的功能你会遇到问题。如果您遇到Stunnel问题,那么很可能是SSL的固有限制,切换到Python SSL后,您将无法免除它。
从Stunnel开始,openssl s_client
和openssl s_server
可能更好。它们是一种“SSL telnet”。