hypercorn: проверка клиент-сертификата - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь включить проверку сертификата клиента в гиперкорне. Если это имеет значение, я использую FastAPI . Документация указывает мне использовать параметр --verify-mode и просто сообщает:

Режим проверки SSL для сертификата однорангового узла, см. Перечисление ssl.VerifyMode для возможных значений.

Я попробовал несколько догадок, но получил фатальную ошибку: «hypercorn: error: аргумент --verify-mode: Недопустимый режим проверки»

Я немного потыкал и нашел этот код в история проекта :

if self.verify_mode is not None:
    context.verify_mode = self.verify_mode

Итак, я сделал это, чтобы проверить действительные значения (Python 3.8):

>>> import ssl
>>> context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
>>> context.verify_mode
<VerifyMode.CERT_NONE: 0>
>>> context.verify_mode = 1
>>> context.verify_mode
<VerifyMode.CERT_OPTIONAL: 1>
>>> context.verify_mode = 2
>>> context.verify_mode
<VerifyMode.CERT_REQUIRED: 2>
>>> context.verify_mode = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "...ssl.py", line 720, in verify_mode
    super(SSLContext, SSLContext).verify_mode.__set__(self, value)
ValueError: invalid value for verify_mode

Однако пытаясь передать 0, 1 или 2 до --verify-mode все выдают ошибку «Недопустимый режим проверки». Я могу передать эти значения, используя --cert-reqs с предупреждением «Предупреждение: используйте вместо него verify_mode», но оно запускается и основывается на коде, который я вижу в config.py , похоже, это правильно вещь и устанавливает значение SSLContext verify_mode.

К сожалению, это, похоже, ничего не делает. Я ожидаю, что мне будет предложено ввести сертификат клиента, когда я сделаю GET в браузере или, по крайней мере, произойдет ошибка, поскольку для него задано значение «требуется». Но вместо этого я получаю хороший ответ с кодом ошибки 200.

Я не могу найти хороших примеров, учебных пособий или документации о том, как сделать это с помощью гиперкорна. Есть ли что-то еще, что мне нужно сделать, например, установить некоторые другие свойства? Любое руководство приветствуется.

1 Ответ

0 голосов
/ 09 апреля 2020

Сначала я думал, что cert-reqs ничего не делает. Однако, работая над чем-то другим, я обнаружил, что это результат фантомных процессов, вероятно, созданных из-за того, что я использовал флаг --reload. Теперь у меня запрашивается сертификат клиента, когда для параметра cert-reqs установлено значение 1 или 2. Я все еще получаю предупреждение и считаю, что параметр verify-mode не работает должным образом, но основное поведение выглядит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...