Первым делом мне пришлось извлечь сертификат и ключи из файла P12
. Предположим, мой клиентский сертификат хранится в формате P12 в файле с именем cert.p12
, я использую openssl для извлечения сертификата и ключей (openssl запросит пароль сертификата):
openssl pkcs12 -in cert.p12 -out cert.pem -clcerts -nokeys
openssl pkcs12 -in cert.p12 -out cert.keys -nocerts
Теперь в Python:
import asyncio
import pathlib
import ssl
import websockets
username = "..."
password = "..."
host = "..."
url = f"wss://{username}:{password}@{host}/..."
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.load_default_certs()
ssl_context.load_cert_chain(
pathlib.Path("cert.pem"),
pathlib.Path("cert.keys"),
"..." # The certificate's password goes here
)
async def consume():
try:
async with websockets.connect(uri=url, ssl=ssl_context) as websocket:
async for message in websocket:
print(message)
except Exception as e:
print(e)
async def main():
await asyncio.gather(consume())
asyncio.get_event_loop().run_until_complete(main())