从 NGINX 中客户端证书的可分辨名称获取通用名称

Getting Common Name from Distinguished Name of client certificate in NGINX

我需要在 NGINX 中获取客户端证书的 CN 以将其附加到代理 headers。

我已经为此找到了以下地图代码。

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

但遗憾的是它只是 returns 以下 $ssl_client_s_dn 的空字符串: CN=testcn,O=测试机构

我也用其他 DN 测试过它。但是问题总是一样的。

您使用的模式需要旧版 DN,因为它假定 / 来分隔 RDN。所以(自 nginx v1.11.6 起)以下工作:

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

用$ssl_client_s_dn_legacy: /O=Test Organization/CN=testcn

如@christof-r 所述,您的正则表达式与旧版 DN 模式相匹配。请使用此正则表达式匹配当前 ( > v1.11.6) 模式。

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