ssl cert files:
generate ssl key and cert files:
openssl req -newkey rsa:2048 -nodes -keyout miaowa.key -x509 -days 365 -out miaowa.crt
wss server:
server code:
#!/usr/bin/env python
import asyncio
import pathlib
import ssl
import websockets
async def hello(websocket, path):
name = await websocket.recv()
print(f"<<< {name}")
greeting = f"Hello {name}!"
await websocket.send(greeting)
print(f">>> {greeting}")
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.check_hostname = False
ssl_context.load_cert_chain('./cert/miaowa.crt', './cert/miaowa.key')
async def main():
async with websockets.serve(hello, "localhost", 8765, ssl=ssl_context):
await asyncio.Future() # run forever
asyncio.run(main())
wss client:
client code:
#!/usr/bin/env python
import asyncio
import pathlib
import ssl
import websockets
ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH, )
ssl_context.check_hostname = False
ssl_context.load_verify_locations('./cert/miaowa.crt')
async def hello():
uri = "wss://localhost:8765"
async with websockets.connect(uri, ssl=ssl_context) as websocket:
name = input("What's your name? ")
await websocket.send(name)
print(f">>> {name}")
greeting = await websocket.recv()
print(f"<<< {greeting}")
asyncio.run(hello())