如何使用客户端证书从无服务器功能进行SSL连接

时间:2018-09-25 14:37:01

标签: ssl lua openresty kong

我正在尝试为Kong创建一个无服务器功能以进行身份​​验证。我需要使用客户端证书来对我们必须使用的远程服务进行身份验证。我似乎无法正常工作,而且似乎没有明确的文档说明如何执行此操作。我尝试了pintsized / lua-resty-http,ngx.socket.tcp()和luacurl(构建失败)没有成功。如果有问题的话,我在Alpine Linux容器中使用Kong的最新版本。

做到这一点的最佳方法是什么?现在,我正在考虑仅从Lua内部调用curl,因为我知道这是可行的,但我希望可以使用Lua / OpenResty实现更好的解决方案。

谢谢。

更新:我只是想添加一下,以防万一,我已经基于官方的Kong创建了一个新映像,因为我不得不修改nginx配置模板,因此在容器中安装新软件是没问题。

1 个答案:

答案 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