Hypercorn: проверка сертификата клиента

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

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

Я попробовал несколько догадок, но получил фатальную ошибку: "hypercorn: error: argument --verify-mode: Not a valid 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.

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

1 ответ

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

Другие вопросы по тегам