【问题标题】:Is any possibility the python TLS over TCP make logic failspython TLS over TCP是否有可能使逻辑失败
【发布时间】:2016-11-18 07:16:29
【问题描述】:

我在 python 中有一个 tcp 代理,版本是 2.6。

在任何情况下都可以正常工作,遵循以下逻辑 客户端--->代理--->服务器

我用 tls 从代理到服务器包装了 tcp。 客户端--->代理==++ssl++==>服务器

在某些情况下可以正常工作,而在其他情况下则失败。

错误是服务器正在等待来自客户端的更多信息,但客户端没有发送更多信息。第26次往返。(当然成功案例的往返次数也大于26次。)

我无法详细说明细节,但我认为 SSL 应该对逻辑透明。 任何想法部分功能失败?我应该如何调试它?

编辑:在python 2.6中,tls版本只能是1.0。

【问题讨论】:

    标签: python ssl tcp tls1.2


    【解决方案1】:

    如果没有任何示例来说明问题,很难判断您在做什么,但取决于您的应用程序的工作方式,SSL/TLS 不仅仅是 TCP 套接字的透明替代品。虽然在大多数情况下它可能是透明的,但如果您只使用阻塞套接字,它会与非阻塞 I/O 有所不同。在这种情况下,您必须处理用户空间缓冲,即使有未读数据,select 也不会报告可用数据。您还必须处理由于 TLS 堆栈需要先读取或以其他方式读取而暂时无法写入的情况。

    有关与非阻塞 I/O 的差异的更多详细信息,请参阅 Behavior of python's select() with partial recv() on SSL socketselect and ssl in python。此外,非阻塞 I/O 也需要使用 accept 和 connect 进行特殊处理,但我怀疑在您使用的旧 python 版本中是否有对它的有用支持。

    【讨论】:

    • 我想你几乎得到了答案。 I/O 使用 select 是无阻塞的,tcp 代理本身是拦截的。您能否提供有关用户空间缓冲的更多详细信息?这是否意味着我需要以某种方式刷新它?
    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多