我是个新手。
我使用的是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。所以你的帮助是感激。
谢谢
1条答案
按热度按时间bnlyeluc1#
在您的第一个片段中:
parse_pem_cert
只是将证书以cdata格式加载到luajit内存中。它是AFAIK,只打算与set_cert
一起使用,并且您不能打印它,因为它是指向该内存块的指针。https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/ssl.md#parse_pem_cert然而,你的第二个片段更接近了,试试这个:
更多信息请访问https://github.com/fffonion/lua-resty-openssl#x509get_-x509set_。