Где указать путь к файлам ssl-сертификата на сервере Python websocket

#python #websocket

#python #websocket

Вопрос:

У меня есть этот фрагмент из:https://websockets.readthedocs.io/en/stable/intro.html

 ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
localhost_pem = pathlib.Path(__file__).with_name("localhost.pem")
ssl_context.load_verify_locations(localhost_pem)
  

Я подписал сертификат CA с файлами ключа, сертификата и пакета. Где их указать?

В моем реальном коде похоже, что все браузеры сообщают о проблеме с недействительным сертификатом:

 def start_server():
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    localhost_pem = pathlib.Path(__file__).with_name("server.pem")
    ssl_context.load_cert_chain(localhost_pem)

    ip = ''

    if os.name =='nt':
        ip = '127.0.0.1'
    else:
        ip = "x.x.x.x"

    start_server = websockets.serve(
        hello, ip, 31333,ssl=ssl_context
    )

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
  

Например, я создал веб-сервер Python и правильно указал эти файлы, и это работает должным образом, и проблема с недействительной сертификацией не возникает :

 server = HTTPServer(('0.0.0.0', 443), PostHandler)
    if USE_HTTPS:
        import ssl
        server.socket = ssl.wrap_socket(server.socket, keyfile='./ssl/key.pem', certfile='./ssl/public.pem'
                , ca_certs="./ssl/cap1_traf_com.ca-bundle" , server_side=True)

        server.serve_forever()
 
  

Ответ №1:

Большинство библиотек, включая websockets , принимают параметр контекста ssl.

В вашем случае, для серверной части, вы хотели бы создать сокет следующим образом:

 import ssl
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain("<cert path>", "<key path>")
  

Это создаст сокет на стороне сервера с целью «аутентификации клиента». Если вы не используете клиентские сертификаты (шансы невелики), этого должно быть достаточно.

Если вашему сертификату требуются дополнительные промежуточные сертификаты («bundle»), они должны быть частью <cert_path> файла. .pem Формат допускает использование нескольких сертификатов, одного за другим.

Обычно простая конкатенация делает свое дело. Для получения дополнительной информации вы можете ознакомиться с документами Python.

Комментарии:

1. где указать сертификат пакета?

2. @user5858 сертификат пакета должен быть добавлен к .pem файлу.