我有一个 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 (Distinguished Name),因此CN等,但似乎无法访问SAN。是否有某些嵌入变量/其他模块/一般的Nginx技巧我所缺失的?我可以访问原始证书,因此是否可能手动解码并提取它?我真的想在Nginx层面做这件事,而不是将证书传递到应用程序层并在那里处理。
非常感谢任何帮助。