Невозможно заставить SSL работать для безопасного соединения с Websocket - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в Python, но для работы мне нужно создать API Websocket. На сайте модуля 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'))

Я получаю ошибку:

Traceback (последний последний вызов):

Файл "/ Applications / Python 3.7 / apii.py", строка 7, в модуле> ssl_context.load_verify_locations (pathlib.Path (__ file __). with_name ('localhost.pem'))

FileNotFoundError: [Errno 2] Нет такого файла или каталога

Не могли бы вы мне помочь?

PS. Я не понимаю идею этого кода ssl_context вообще. Может кто-нибудь объяснить логику этого, пожалуйста?

1 Ответ

0 голосов
/ 25 октября 2018

Я тестирую веб-сокеты из док-контейнеров. где у меня есть 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)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...