You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx中获取客户端证书的颁发者哈希值?

在Nginx中获取客户端证书颁发者哈希并传递给后端服务

我希望将客户端证书的颁发者哈希值传递给Nginx后方的服务。通过命令行的openssl工具,可以用以下命令获取该哈希值:

  • openssl x509 -in B0100002230000023.crt -noout -issuer_hash
  • 示例输出:529e9f5d

但我无法在Nginx配置中直接获取这个值,以下是我的示例配置,其中[SOME_VAR_TO_GET_HASH]位置需要填入对应的变量或函数,目前尚未找到合适的选项:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name example.com;

    ssl_certificate /etc/nginx/ssl/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/example.com/privkey.pem;

    ssl_client_certificate /etc/nginx/client-cer/ROOT.crt;
    ssl_verify_client      optional;

    location /default/controller/ {
        if ($ssl_client_verify != SUCCESS) {
           return 403;
        }

        proxy_pass http://app.behind:8080;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Ssl-Issuer-Hash-1 [SOME_VAR_TO_GET_HASH];
   }
}

解决方案

Nginx原生变量中没有直接提供颁发者哈希的选项,可通过以下两种方式实现:

方法一:预计算哈希硬编码(适用于颁发者固定场景)

如果客户端证书的颁发者是固定的,提前用openssl x509 -in ROOT.crt -noout -issuer_hash计算出哈希值,直接写入配置:

proxy_set_header X-Ssl-Issuer-Hash-1 529e9f5d;

方法二:用Lua模块动态计算(适用于多颁发者场景)

借助lua-nginx-module(推荐使用OpenResty集成)实时计算哈希:

  1. 确保Nginx已安装该模块
  2. 修改配置添加Lua逻辑:
location /default/controller/ {
    if ($ssl_client_verify != SUCCESS) {
       return 403;
    }

    set $issuer_hash "";
    access_by_lua_block {
        local issuer_dn = ngx.var.ssl_client_i_dn
        -- 实现与openssl issuer_hash一致的计算逻辑:对DN做MD5哈希,取后8字节转小写
        local md5 = require "resty.md5"
        local str = require "resty.string"
        local md5_ctx = md5:new()
        md5_ctx:update(issuer_dn)
        local digest = md5_ctx:final()
        local hash = str.to_hex(digest):sub(16, 32):lower()
        ngx.var.issuer_hash = hash
    }

    proxy_pass http://app.behind:8080;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Ssl-Issuer-Hash-1 $issuer_hash;
}

内容的提问来源于stack exchange,提问作者Yusufss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:42:42