首页 > 解决方案 > Pickle 一个 python 请求会话以在不同的应用程序运行中实现“TLS 会话恢复”

问题描述

我正在尝试为我的命令行应用程序实现 TLS 会话恢复。

这个问题#2522解释了如何腌制一个requests.session.

但是,当我重新运行我的应用程序(加载腌制会话)时,会重复 TLS 握手。

我想知道我错过了什么?这甚至可能吗?

我想要的行为是:

# first execution, TLS handshake is performed
$ time my_python_app.py
0.2s

# second execution, TLS handshake is reused
$ time my_python_app.py
0.02s

标签: sslpython-requeststls1.2

解决方案


ssl使用 Python 的 ssl 库(即或)提供的 API 可能无法做到这一点pyopenssl。在 OpenSSL 中,TLS 会话是一个内存结构,它具有指向其他结构等的指针——并且这个结构需要以某种方式进行序列化以便在以后的不同进程中进行存储和反序列化。有函数 i2d_SSL_SESSION 和 d2i_SSL_SESSION 可以做到这一点,但是这些以及将会话重新创建到上下文中所需的所有其他函数都不会暴露给 Python。

如果可能,请改用 TLS 1.3。即使没有会话重用,它也已经缩短了 TLS 握手。


推荐阅读