如何在django中检索ssl证书?

时间:2014-02-19 00:04:15

标签: django ssl-certificate lighttpd

是否可以从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。

1 个答案:

答案 0 :(得分:0)

是。虽然这个问题不是特定于Django的。

通常,Web服务器可以选择将SSL客户端证书数据导出为环境变量或HTTP标头。我自己用Apache(而非Lighttpd)完成了这个。

我就这样做了

  1. 在Apache上,将SSL证书数据导出到环境变量

  2. 然后,添加包含这些环境变量的新HTTP请求标头

  3. 在Python代码中读取标题

  4. http://redmine.lighttpd.net/projects/1/wiki/Docs_SSL

    看起来选项名称为ssl.verifyclient.exportcert

    虽然我不知道如何使用lighttpd执行第2步,因为我对它没什么经验。