Nginx - 如何访问客户端证书的使用者备用名称 (SAN) 字段

2024-06-25

我有一个 Nginx 服务器,客户端使用包含特定 CN 和 SAN 的客户端证书向该服务器发出请求。我希望能够提取该客户端证书的 CN(通用名称)和 SAN(主题备用名称)字段。

粗略的示例配置:

server {
listen 443 ssl;
ssl_client_certificate /etc/nginx/certs/client.crt;
ssl_verify_client on; #400 if request without valid cert

location / {
    root    /usr/share/nginx/html;

}
location /auth_test {
    # do something with the CN and SAN.
    # tried these embedded vars so far, to no avail
    return 200 "
    $ssl_client_s_dn 
    $ssl_server_name
    $ssl_client_escaped_cert
    $ssl_client_cert
    $ssl_client_raw_cert";
}
}

使用作为一部分公开的嵌入变量ngx_http_ssl_模块 http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables我可以访问 DN(专有名称),因此可以访问 CN 等,但我似乎无法访问 SAN。

我缺少一些嵌入式 var / 其他模块 / 一般 Nginx foo 吗?我可以访问原始证书,那么是否可以手动解码并提取它?

我真的宁愿在 Nginx 层执行此操作,而不是将证书传递到应用程序层并在那里执行。

非常感谢任何帮助。


您可以使用 Nginx 内置的命令来提取它们map http://nginx.org/en/docs/http/ngx_http_map_module.html,例如对于中国:

map $ssl_client_s_dn $ssl_client_s_dn_cn {
    default "";
    ~,CN=(?<CN>[^,]+) $CN;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx - 如何访问客户端证书的使用者备用名称 (SAN) 字段 的相关文章

随机推荐