gpt4 book ai didi

ssl - Nginx 将客户端证书映射到 uWSGI 的 REMOTE_USER 并回退到基本身份验证?

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:34 25 4
gpt4 key购买 nike

我正在使用 Nginx 和 uWSGI 来为 Mercurial 服务;它通过 SSL 进行基本身份验证(Nginx 是 SSL 终结器;它不会传递给 Hg),但由于基本身份验证的安全性有限,即使通过 SSL,正如在包括本网站在内的各个地方所讨论的,我想允许用户也可以连接客户端证书,例如 TortoiseHg 支持的东西。

ssl_verify_client optional;
...
map $ssl_client_s_dn $ssl_client_s_dn_cn
{
default "";
~/CN=(?<CN>[^/]+) $CN;
};
...
location /
{
uwsgi_pass unix:/run/uwsgi/app/hgweb/socket;
include uwsgi_params;
uwsgi_param SERVER_ADDR $server_addr;
uwsgi_param REMOTE_USER $ssl_client_s_dn_cn;
#uwsgi_param REMOTE_USER $remote_user;
#auth_basic "Mercurial repositories";
#auth_basic_user_file /srv/hg/.htpasswd;

所以我将 CN 视为用户名。但是,当没有客户端证书时(最好是不是,当有证书但验证失败时,我该如何回退到基本身份验证——在那种情况下只是错误)?我发现的一个例子是通过让一个单独的服务器 block 监听另一个端口来实现的,我想避免这种情况:https://github.com/winne27/nginx-cert-and-basic-auth/blob/master/nginx-example.conf

此外,在某些示例中,我在 location 中看到了以下检查;他们有必要吗? if ($ssl_client_verify != SUCCESS) { 返回 496; } if ($ssl_client_s_dn_cn !~ "^[a-z0-9]{1,10}$") { 返回 496; }给定http://wiki.nginx.org/IfIsEvil我认为最好避免使用 if

最佳答案

Nginx 1.11 和 1.12 更改了 $ssl_client_s_dn_cn 的引用。

如果你来这里头疼,试试这个正则表达式:

map $ssl_client_s_dn $ssl_client_s_dn_cn {
default "should_not_happen";
~CN=(?<CN>[^/,\"]+) $CN;
}

关于ssl - Nginx 将客户端证书映射到 uWSGI 的 REMOTE_USER 并回退到基本身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com