#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
файлу.