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

标签 nginx ssl-certificate x509 client-certificates

我有一个 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_module 的一部分公开的嵌入变量模块我可以访问 DN(专有名称),因此可以访问 CN 等,但我似乎无法访问 SAN。

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

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

非常感谢任何帮助。

最佳答案

您可以使用 Nginx 内置的 map 提取它们,例如对于 CN:

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

关于Nginx - 如何访问客户端证书的主题备用名称(SAN)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613782/

相关文章:

ssl - HAProxy SSL 终止 - 客户端证书扩展 key 使用扩展验证

php - 更改 `php.ini` 中的值在 Nginx 中未生效

ruby-on-rails - (使用 phusion passenger + Nginx)运行具有相同端口(80)的多个实例名称的相同 Rails 应用程序

Nginx proxy_pass 到 https

ruby-on-rails - rails nginx puma 在/etc/nginx/sites-enabled 中复制上游 "puma"

java - 从证书中读取替代名称

facebook - 使用 HTTPS 时为 "Empty response received"

ssl - 用于私有(private)域注册的 SSL 证书的 whois 验证

java - 如何将服务器证书添加到eclipse中的java应用程序中

ssl - 什么是 CA 证书,我们为什么需要它?