从NGINX中的客户端证书的专有名称中获取通用名称

时间:2019-03-24 15:45:39

标签: nginx certificate client

我需要在NGINX中获得客户端证书的CN,以将其附加到代理标头中。

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

import cors = require('cors')
app.use(
    cors(),
    express.json(),
    express.urlencoded({extended:false})
)

但是可悲的是,它只为以下$ ssl_client_s_dn返回一个空字符串: CN = testcn,O =测试组织

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

2 个答案:

答案 0 :(得分:1)

您使用的模式需要旧版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 =测试组织/ CN = testcn

答案 1 :(得分:0)

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

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