是否可以从Django中的当前连接检索客户端的SSL证书? 我没有看到从lighttpd传递的请求上下文中的证书。 我的设置有lighttpd和django在fastcgi模式下工作。 目前,我被迫手动连接回客户端的IP以验证证书。 有一种聪明的技巧可以避免这种情况吗?谢谢!
更新: 我将这些行添加到lighttpd.conf中:
ssl.verifyclient.exportcert = "enable"
setenv.add-request-header = (
"SSL_CLIENT_CERT" => env.SSL_CLIENT_CERT
)
不幸的是,env.SSL_CLIENT_CERT无法解除引用(不存在?)并且lighttpd无法启动。 如果我用“1”之类的静态值替换“env.SSL_CLIENT_CERT”,它会在request.META字段中成功传递给django。 别的,我可以试试吗?这是lighttpd 1.4.29。
答案 0 :(得分:0)
是。虽然这个问题不是特定于Django的。
通常,Web服务器可以选择将SSL客户端证书数据导出为环境变量或HTTP标头。我自己用Apache(而非Lighttpd)完成了这个。
我就这样做了
在Apache上,将SSL证书数据导出到环境变量
然后,添加包含这些环境变量的新HTTP请求标头
在Python代码中读取标题
http://redmine.lighttpd.net/projects/1/wiki/Docs_SSL
看起来选项名称为ssl.verifyclient.exportcert
。
虽然我不知道如何使用lighttpd执行第2步,因为我对它没什么经验。