运行时uwsgi / nginx / django客户端证书身份验证提升

时间:2013-07-23 13:17:47

标签: django nginx uwsgi client-certificates

序言

我有一个django应用程序设置为在nginx传递的uwsgi代理下运行。在冰岛,我们有一个智能卡客户端证书系统,嵌入在债务卡中,由债务卡发行商即银行免费分发。我正在尝试支持此环境进行身份验证,同时保留在进行身份验证时发出逻辑的能力,从而使该流程对用户具有交互性。目前我们使用Apache / mod_wsgi来托管应用程序并使用位置指令/ auth / smartcard,我们需要客户端证书握手。该站点的根目录只是普通的https。这只会将流程降级到服务器,从而使我们无法以建设性的方式与用户进行交互。

到目前为止的配置

uWSGI ini:

[uwsgi]
chdir=/home/vagrant/gimli/src
socket=localhost:5000
processes=1
module=application_name.wsgi:application
env DJANGO_SETTINGS_MODULE=application_name.settings
max-requests=5000
home=/home/vagrant/virtualenvs/gimli
py-autoreload=True

nginx设置

server {
<snip>
ssl on;
ssl_protocols SSLv3 TLSv1;
ssl_certificate ssl/host.domain.is.crt;
ssl_certificate_key ssl/host.domain.is.key;
ssl_client_certificate ssl/ca_chain.crt;
ssl_verify_client optional;
ssl_verify_depth 2;

error_log /var/log/nginx/host.domain.error.log debug; # debug for debugging ssl
access_log /var/log/nginx/host.domain.is.access.log;

location / {
include uwsgi_params;

# Client cert support
uwsgi_param SSL_CLIENT_ID $ssl_client_s_dn;

# Bind parameters
uwsgi_pass localhost:5000;
}
</snip>
} # /server

如果智能卡读卡器(usb dongle)提供给浏览器,这些配置将启用SSL和可选的客户端证书。因此ssl_verify_client可选指令。我们没有和Nginx结婚,尽管我们不想裸体运行uwsgi。

问题

是否有可能 - 在运行时 - 从应用程序向服务器发出指令,以使用uwsgi或nginx将ssl连接提升为需要客户端证书?从本质上讲,是否可以改变ssl_verify_client设置的状态,重新协商ssl握手?

0 个答案:

没有答案