我在nginx中启用了SSL,并在浏览器中启用了客户端证书。有了这个,我可以通过HTTPS通过端口443访问我的站点。
我现在要寻找的是使用有关客户端的信息来允许访问API的不同部分(URL),但拒绝对其他部分的访问。我可以使用IP地址和ngx_http_access_module来完成这一任务,如下所示:
location /allowed/loc {
allow 192.168.1.0/24;
}
location /protected/loc {
allow 192.168.1.10;
deny all;
}我正在寻找的是允许/拒绝基于客户端证书而不是IP地址的某种方法(类似于以下内容):
location /authorize/by/cert {
allow client-cert-serial;
deny all;
}在nginx中有办法做到这一点吗,或者我需要使用其他的东西吗?还是我想错了?
谢谢你的帮助。
发布于 2017-01-07 01:00:30
对于访问检查,您可以使用if指令和ssl模块变量:$ssl_client_s_dn、$ssl_client_serial。示例
location /not/for/jhon/ {
if ($ssl_client_s_dn ~ Jhon) {
return 403;
}
}维护允许的map指令证书列表的好方法。示例
map $ssl_client_s_dn $ssl_access {
default 0;
01 1;
02 1;
}
server {
...
location /authorize/by/cert {
if ($ssl_access = 0) {
return 403;
}
}
}或者,规则可能更复杂
map $ssl_client_s_dn $ssl_access {
default "";
01 -a-b-c-;
02 -b-e-;
}
server {
...
location /authorize/by/cert/a {
if ($ssl_access !~ -a-) {
return 403;
}
}
location /authorize/by/cert/b {
if ($ssl_access !~ -b-) {
return 403;
}
}
}但请在https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/之前阅读本文。只将if与return或rewrite ... last;指令一起使用。
https://stackoverflow.com/questions/41513400
复制相似问题