我能够使用以下代码将CherryPy HTTPServer设置为需要SSL证书:
ssl_certificate = os.environ.get("SSL_CERTIFICATE")
ssl_adapter = BuiltinSSLAdapter(
certificate=ssl_certificate,
private_key=os.environ["SSL_PRIVATE_KEY"],
certificate_chain=os.environ.get("SSL_CERTIFICATE_CHAIN")
)
verify_mode = ssl.CERT_REQUIRED
ssl_adapter.context.verify_mode = verify_mode
HTTPServer.ssl_adapter = ssl_adapter现在,我正在尝试从请求处理程序获取SSL客户端认证信息,但我不知道如何获取。在阅读https://github.com/cherrypy/cheroot/blob/master/cheroot/ssl/builtin.py#L419之后,似乎应该用SSL_CLIENT*变量填充wsgi环境变量。我无法从请求对象中找到任何允许我获取此类信息的方法/属性
如何从请求处理程序获取此变量?
发布于 2020-07-23 04:25:48
我从与CherryPy维护者在Gitter上的一次对话中了解到了答案。
WSGI对象可以包含比source接口中记录的属性更多的属性,这些属性是在创建请求对象作为CherryPy处理的一部分时动态设置的:
https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_cpwsgi.py#L319
...
request.multithread = self.environ['wsgi.multithread']
request.multiprocess = self.environ['wsgi.multiprocess']
request.wsgi_environ = self.environ
...了解了这一点,要获得包含SSL*变量的WSGI环境,我们只需要通过导入request对象来访问它:
import cherrypy.request
...
print(cherrypy.request.wsgi_environ)
...https://stackoverflow.com/questions/62970183
复制相似问题