我正在尝试在Hypercorn中启用客户端证书验证。如果有问题,我正在使用FastAPI。 documentation指示我使用--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
但是,尝试将0
,1
或2
传递给--verify-mode
都会产生“无效的验证模式”错误。我可以使用--cert-reqs
并通过警告“警告:请改用verify_mode”来传递这些值,但是它会启动并基于我在config.py中看到的代码,这似乎是正确的,并且设置SSLContext
verify_mode
的值。
不幸的是,这似乎没有任何作用。当我在浏览器中执行GET
时,如果将其设置为“ required”,则至少会提示我输入客户端证书的提示。但是,相反,我得到了很好的200错误代码响应。
我找不到有关使用hypercorn进行此操作的任何好的示例,教程或文档。我还需要做其他事情,例如设置其他属性吗?任何指导表示赞赏。
答案 0 :(得分:0)
我最初以为cert-reqs
并没有做任何事情。但是,在进行其他工作时,我发现这是可能由于我使用--reload
标志而创建的幻影过程的结果。现在,当cert-reqs
选项设置为1或2时,系统提示我提供客户端证书。我仍然收到警告,并且我相信verify-mode选项不能正常工作,但是基本行为似乎正常。 / p>