hypercorn:客户证书验证

时间:2020-04-08 18:54:55

标签: python fastapi asgi hypercorn

我正在尝试在Hypercorn中启用客户端证书验证。如果有问题,我正在使用FastAPIdocumentation指示我使用--verify-mode参数,并简单说明:

对等方证书的SSL验证模式,有关可能的值,请参见ssl.VerifyMode枚举。

我尝试了一些猜测,但收到一个致命错误:“超级玉米:错误:参数--verify-mode:不是有效的验证模式”

我戳了一下,在project history中找到了这段代码:

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

但是,尝试将012传递给--verify-mode都会产生“无效的验证模式”错误。我可以使用--cert-reqs并通过警告“警告:请改用verify_mode”来传递这些值,但是它会启动并基于我在config.py中看到的代码,这似乎是正确的,并且设置SSLContext verify_mode的值。

不幸的是,这似乎没有任何作用。当我在浏览器中执行GET时,如果将其设置为“ required”,则至少会提示我输入客户端证书的提示。但是,相反,我得到了很好的200错误代码响应。

我找不到有关使用hypercorn进行此操作的任何好的示例,教程或文档。我还需要做其他事情,例如设置其他属性吗?任何指导表示赞赏。

1 个答案:

答案 0 :(得分:0)

我最初以为cert-reqs并没有做任何事情。但是,在进行其他工作时,我发现这是可能由于我使用--reload标志而创建的幻影过程的结果。现在,当cert-reqs选项设置为1或2时,系统提示我提供客户端证书。我仍然收到警告,并且我相信verify-mode选项不能正常工作,但是基本行为似乎正常。 / p>