Jas*_*iss 6 python starttls python-asyncio
我有一个使用高级Streams API编写的 Python 异步服务器。我想在已建立的连接上启用 TLS,如 SMTP 和 IMAP 协议中的 STARTTLS。asyncio 事件循环有一个start_tls()函数(在 Python 3.7 中添加),但它需要一个协议和一个传输而不是一个流。流 API 确实允许您通过StreamWriter.transport获取传输。我没有看到改变传输的方法,这在调用 start_tls() 后是必需的。
是否可以将 start_tls() 与流 API 一起使用?
从 python 3.11 开始,这就像调用StreamWriter.start_tls https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamWriter.start_tls一样简单
例如对于客户:
import asyncio
import ssl
reader, writer = await asyncio.open_connection('your_server_uri_here', port)
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
# Adjust the ssl context for your particular needs (e.g. self signed certificate or what not)
await writer.start_tls(context)
Run Code Online (Sandbox Code Playgroud)
对于服务器,您可以将升级代码添加到您的处理程序中
import asyncio
from asyncio.streams import StreamReader, StreamWriter
import ssl
# Modify to match your needs
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain("path/to/cert", "path/to/key")
def handler(reader: StreamReader, writer: StreamWriter):
await writer.start_tls(context)
# Do stuff
await asyncio.start_server(handler, "server hostname", 8000)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |