Как подключиться к веб-сокету, для которого требуется сертификат клиента, используя Python - PullRequest
0 голосов
/ 18 июня 2020

Я использую Python s websockets для подключения к серверу websocket с использованием базовой c -аутентификации. Теперь сервер требует, чтобы я представил сертификат клиента ssl / tls, который у меня есть в формате P12.

Как мне настроить мой клиент websockets для использования сертификата, найденного в файле P12?

1 Ответ

0 голосов
/ 18 июня 2020

Первым делом мне пришлось извлечь сертификат и ключи из файла 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())

...