我正在尝试为Kong创建一个无服务器功能以进行身份验证。我需要使用客户端证书来对我们必须使用的远程服务进行身份验证。我似乎无法正常工作,而且似乎没有明确的文档说明如何执行此操作。我尝试了pintsized / lua-resty-http,ngx.socket.tcp()和luacurl(构建失败)没有成功。如果有问题的话,我在Alpine Linux容器中使用Kong的最新版本。
做到这一点的最佳方法是什么?现在,我正在考虑仅从Lua内部调用curl,因为我知道这是可行的,但我希望可以使用Lua / OpenResty实现更好的解决方案。
谢谢。
更新:我只是想添加一下,以防万一,我已经基于官方的Kong创建了一个新映像,因为我不得不修改nginx配置模板,因此在容器中安装新软件是没问题。
答案 0 :(得分:1)
全部
为丑陋的代码道歉,但看起来找到了有效的答案:
require("socket")
local currUrl= "https://some.url/"
local https = require("ssl.https")
local ltn12 = require("ltn12")
local chunks = {}
local body, code, headers, status = https.request{
mode = "client",
url = currUrl,
protocol = "tlsv1_2",
certificate = "/certs/bundle.crt",
key = "/certs/bundle.key",
verify = "none",
sink = ltn12.sink.table(chunks),
}
如果有人有更好的答案,我将不胜感激,但是很难抱怨这个问题。主要问题是,尽管这对GET请求有效,但将来我将要对服务进行POST,而且我不知道如何使用类似的代码来实现。我想要一个可以执行任何类型的REST请求的库/ API。
此博客使我走上了正轨:http://notebook.kulchenko.com/programming/https-ssl-calls-with-lua-and-luasec