2

前言

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

到目前为止的配置

uWSGI 初始化:

[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 握手?

4

0 回答 0