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 не работает должным образом, но основное поведение кажется нормальным.