我正在尝试创建用于内部测试的路由器。我正在使用openresty图片RESTY_CONFIG_OPTIONS_MORE。由于我们从客户端发送的消息是二进制的,并且没有任何请求标头,因此我们尝试从cert中提取颁发者和序列号,并将其设置为请求标头。
我们希望使用这些头来路由到我们的测试服务器,而不是根据头值将其路由到生产服务器。
我的dockerfile像这样抓取它:
ENV RESTY_CONFIG_OPTIONS_MORE "--with-ngx_http_ssl_module"
我已经在服务器块中尝试了以下操作,但没有成功:
rewrite_by_lua_block {
ngx.req.set_header("x-issuer", ngx.var.ssl_client_i_dn)
}
作者提到
envsubst
实用程序包含在所有图像中,高山和Windows除外。这与我的问题有任何关系吗?如果仅添加config选项不起作用,您认为哪个是最佳选择?
使用nginx-ssl-variables看起来确实像我们想要的那样:https://github.com/Seb35/nginx-ssl-variables
修改openresty代码以构建我们自己的映像,该映像增强了ngx.ocsp模块,以使证书可作为
ngx.var.ssl_client_raw_cert in rewrite_by_lua_block
使用修改openresty代码以构建我们自己的覆盖SSL握手的映像
以上的一些组合
其他?
最佳答案
ngx_http_ssl_module默认安装在官方的OpenResty docker映像中。
您无需关心RESTY_CONFIG_OPTIONS_MORE。
IMO最好的解决方案是使用nginx-ssl-variables作为参考实现并设置所需的变量,例如:
set_by_lua_block $ssl_client_issuer {
if ngx.var.https == "on" then
return require("openssl").x509.read(ngx.var.ssl_client_raw_cert):issuer():oneline()
end
return nil
}
您将需要安装lua-openssl。 IMO安装该模块的最简单方法是将其包含在Dockerfile中(从具有luarocks support的映像构建):
RUN luarocks install openssl --server=https://rocks.moonscript.org/dev