nginx 在openresty中读取客户端证书主题

5us2dqdw  于 2023-03-29  发布在  Nginx
关注(0)|答案(1)|浏览(223)

我是个新手。
我使用的是openresty/openresty:1.21.4.1-3-alpine-fat image。
客户端在请求中发送其证书。
我需要读取证书的主题来实现一些业务逻辑,但我似乎无法找到如何读取证书。我需要等效(或更好)的openssl命令:openssl x509 -text -noout -in cert.pem
我尝试了:

content_by_lua_block {
            local ssl = require "ngx.ssl"
            local cjson = require "cjson"
            local x509 = require "resty.openssl.x509"
            local cert = ngx.var.ssl_client_cert;
            local json = {certificate = cert}
            local x509_cert, err = ssl.parse_pem_cert(cert)
            ngx.say(x509_cert)
        }

这给了我一个PEM_read_bio_X509_AUX() failed
接下来我试着

content_by_lua_block {
            local ssl = require "ngx.ssl"
            local cjson = require "cjson"
            local x509 = require "resty.openssl.x509"
            local cert = ngx.var.ssl_client_cert;
            local json = {certificate = cert}
            local x509_cert, err = x509.new(cert, PEM) 
            ngx.log(ngx.INFO,"certificate parse:", x509_cert)
            ngx.log(ngx.INFO,"error: ", err)
            -- local issuer = x509.read(cert)
            ngx.say(cjson.encode(json))
            ngx.say(x509_cert)
        }

但这给了我一个x509.new: asn1/tasn_dec.c:309:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error,这表明证书coruption。
所以我使用resty使用的openssl来运行openssl x509 -text -noout -in cert.pem,它工作了。
在这一点上,我已经用尽了所有的文件建议在这个问题上,不能找到任何线索的interent。所以你的帮助是感激。
谢谢

bnlyeluc

bnlyeluc1#

在您的第一个片段中:

local x509_cert, err = ssl.parse_pem_cert(cert)
       ngx.say(x509_cert)

parse_pem_cert只是将证书以cdata格式加载到luajit内存中。它是AFAIK,只打算与set_cert一起使用,并且您不能打印它,因为它是指向该内存块的指针。https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/ssl.md#parse_pem_cert
然而,你的第二个片段更接近了,试试这个:

local ngx_client_cert_raw = ngx.var.ssl_client_raw_cert
local x509 = require "resty.openssl.x509"
local x509_client_cert = x509.new(ngx_client_cert_raw, PEM)
local x509_client_cert_subject = client_cert:get_subject_name()
ngx.say(x509_client_cert_subject:tostring())

更多信息请访问https://github.com/fffonion/lua-resty-openssl#x509get_-x509set_。

相关问题