应用 - SSL
使用SSL时,尽量用域名的形式连接(ws 可能会验证域名)。更多,请参考 python 关于 ssl 的信息。
1、单向认证
- 客户端
async def main():
clientSession1 = await SocketD.create_client("sd:wss://localhost:8602/?u=noear&p=2")
.open()
- 服务端
async def main():
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.check_hostname = False
ssl_context.load_cert_chain(certfile=r"/data/ssl/server.crt", keyfile=r"/data/ssl/server.key")
#::启动服务端
await (SocketD.create_server("sd:ws")
.config(lambda c: c.port(8602).ssl_context(ssl_context))
.start())
1、双向认证
- 客户端
async def main():
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.check_hostname = False
ssl_context.load_cert_chain(certfile=r"/data/ssl/server.crt", keyfile=r"/data/ssl/server.key")
clientSession1 = await SocketD.create_client("sd:ws://localhost:8602/?u=noear&p=2")
.config(lambda c: c.ssl_context(ssl_context))
.open()
- 服务端
async def main():
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.verify_mode = ssl.CERT_REQUIRED # 强制要求进行证书验证
ssl_context.check_hostname = False
ssl_context.load_cert_chain(certfile=r"/data/ssl/server.crt", keyfile=r"/data/ssl/server.key")
#::启动服务端
await (SocketD.create_server("sd:ws")
.config(lambda c: c.port(8602).ssl_context(ssl_context))
.start())