我能够使用以下代码将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环境变量。我无法从请求对象中找到任何方法/属性,无法让我获取此类信息
如何从请求处理程序中获取此变量?
答案 0 :(得分:0)
我通过与Gitter上的CherryPy维护者的对话中学到了答案。
CherryPy请求对象可能包含比API source中记录的属性更多的属性,一旦在WSGI处理中创建了请求对象,就可以动态设置这些属性:
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环境,我们只需导入请求对象即可访问它:
import cherrypy.request
...
print(cherrypy.request.wsgi_environ)
...