在 nginx.conf 中,我添加了一个 if 子句来过滤基于 cn 的 ssl 连接。
例如
map $ssl_client_s_dn $ssl_client_s_dn_cn {
default "";
~/CN=(?<CN>[^/]+) $CN;
}
server {
listen 80 default_server;
server_name nginx-server;
return 301 https://$server_name$request_uri;
listen 443 ssl;
listen [::]:443 ssl;
server_name nginx-server;
ssl_certificate /path/to/server/cert.pem
ssl_certificate_key /path/to/nginx-server/privatekey.pem
location / {
if ($ssl_client_s_dn_cn !~ "client") {
return 403;
}
root /usr/share/nginx/html;
index index.html index.htm;
}
}
现在从命令行我试图通过提供一个证书来卷曲,该证书的 DN 类似于C=GB,ST=London,L=City,O=MyOrg,OU=myOU,CN=client
我得到 403 错误。
我也尝试使用其他证书,无论证书 DN/CN 是什么,我注意到 Nginx 返回 403。在访问日志中,我尝试将$ssl_client_s_dn
值记录在日志中,但它是空白的。
我从http://nginx.org/en/docs/http/ngx_http_ssl_module.html获取了参考
我在这里想念什么?
更新:
如果我对以下函数中的值进行硬编码以返回客户端,则效果很好:
map $ssl_client_s_dn $ssl_client_s_dn_cn {
default "client";
}
我注意到 ssl_client_s_dn 的值根据 nginx 日志可能为空白。是否与启用 ngx_http_ssl_module 模块有关?
我检查了$ nginx V
我认为该模块已列出。
不知道我错过了什么!请问有什么帮助吗?
谢谢,杰