从 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;
}
我需要在 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;
}