无法让 SSL 用于安全的 Websocket 连接

flT*_*flT 3 ssl websocket python-3.x

我是 Python 新手,但必须构建一个 Websocket API 才能工作。websockets 模块的网站说,此代码应该适用于安全的 websocket 连接(https://websockets.readthedocs.io/en/stable/intro.html

但是,我无法让提供的代码工作..

import websockets
import asyncio
import pathlib
import ssl

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.load_verify_locations(pathlib.Path(__file__).with_name('localhost.pem'))
Run Code Online (Sandbox Code Playgroud)

我收到错误:

回溯(最近一次调用最后一次):

文件“/Applications/Python 3.7/apii.py”,第 7 行,在模块> ssl_context.load_verify_locations(pathlib.Path(__ file__).with_name('localhost.pem'))

FileNotFoundError: [Errno 2] 没有那个文件或目录

你能帮我吗?

附注。我根本不了解这个 ssl_context 代码。有人可以解释一下它背后的逻辑吗?

Mor*_*enB 5

我从 docker 容器测试 websockets。我有 NAT ips(不能使用 LetsEncrypt),并且没有 * 域证书。如果我直接在 Firefox 中测试,它可以在没有任何证书的情况下正常工作。因此,应该允许在防火墙内禁用 SSL 以进行测试。

提炼:

import asyncio
import websockets
import ssl
:    
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE

async def logIn(uri, myjson):
    async with websockets.connect(uri) as websocket:
        await websocket.send(myjson)

async def logIn(uri, myjson):
    async with websockets.connect(uri, ssl=ssl_context) as websocket:
        await websocket.send(myjson)
        resp = await websocket.recv()
        print(resp)

myurl = f"wss://{args.server}:{args.port}"
print("connection url:{}".format(myurl))

# logdef is the json string I send in
asyncio.get_event_loop().run_until_complete(
    logIn(myurl, logdef)
)
Run Code Online (Sandbox Code Playgroud)