从nginx中的eidas中提取qcstatement

bd1hkmkf  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(111)

我们正在从eIDAS证书中提取qcstatement,该证书作为传入请求发送到nginx。我发现nginx java script njs模块是nginx原生的,可以用于脚本编写。我们的要求是原始证书将在$ssl_client_raw_cert中,它应该是njs的输入,并且它应该从证书中提取qcstatement并发送回请求。njs能处理那部分吗?或者有没有其他方法可以尝试?
我们已经在系统上安装了njs并分析了代码特性。

ibrsph3r

ibrsph3r1#

IMO直接从NGINX分析qcStatement可能有点挑战性,即使你有njs,我不确定是否值得。我宁愿将原始证书传递给应用层,并在那里进行必要的检查。
以下是如何提取客户端证书并通过NGINX中的客户头将其传递给您的应用程序(下面的示例使用openresty):

server {
    listen       443 ssl;

    ssl_certificate         /app/server.crt;
    ssl_certificate_key     /app/server.key;
    ssl_verify_client       optional;
    ssl_client_certificate  /app/certificates; // trusted client CAs

    error_page 495          /ca_error.json;
    location = /ca_error.json {
                root /app;
                internal;
            }

    set_by_lua_block $client_cert {
            ngx.req.clear_header("X-CLIENT-CERTIFICATE")
            local client_certificate = ngx.var.ssl_client_raw_cert
            -- ngx.log(ngx.STDERR, ngx.var.ssl_client_raw_cert)
            if (client_certificate ~= nil) then
                client_certificate = string.gsub(client_certificate, "\n", "")
                ngx.req.set_header("X-CLIENT-CERTIFICATE", client_certificate)
            end
            return client_certificate
    }

    location / {
        proxy_pass http://localhost:8080;
    }
}

字符串

相关问题