将客户端 ssl 证书变量设置为 openresty 中消息的请求 headers
Set client ssl cert variables as request headers of the message in openresty
我正在尝试创建一个用于内部测试的路由器。我正在使用 openresty 图片 RESTY_CONFIG_OPTIONS_MORE。由于我们从客户端发送的消息是二进制的并且没有任何请求 headers,我们试图从证书中提取颁发者和序列号并将它们设置为请求 headers。
我们希望使用这些 header 路由到我们的测试服务器,而不是根据 header 值路由到生产服务器。
我的 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
实用程序包含在除 alpine 和 windows 之外的所有图像中。这与我的问题有任何关系吗?
如果仅附加配置选项不起作用,您认为哪个是最佳选择?
- 使用 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 the simplest way to install that module is to include into your Dockerfile (built from an image with luarocks support):
RUN luarocks install openssl --server=https://rocks.moonscript.org/dev
我正在尝试创建一个用于内部测试的路由器。我正在使用 openresty 图片 RESTY_CONFIG_OPTIONS_MORE。由于我们从客户端发送的消息是二进制的并且没有任何请求 headers,我们试图从证书中提取颁发者和序列号并将它们设置为请求 headers。 我们希望使用这些 header 路由到我们的测试服务器,而不是根据 header 值路由到生产服务器。
我的 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
实用程序包含在除 alpine 和 windows 之外的所有图像中。这与我的问题有任何关系吗?
如果仅附加配置选项不起作用,您认为哪个是最佳选择?
- 使用 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 the simplest way to install that module is to include into your Dockerfile (built from an image with luarocks support):
RUN luarocks install openssl --server=https://rocks.moonscript.org/dev