NGINX基础位置子路径每个都有不同的TLS证书和密钥
2018-3-6 13:7:45
收藏:0
阅读:89
评论:2
问题:我们的NGINX实现有几个不同操作类型的基础位置,例如/analytics,/topology,...;每个位置都有自己的access_by_lua_file,它打开一个包含必须被验证和处理的几个内容的令牌,包括一个新的右边路径,完整的具有自己的证书、密钥和ca。我们的问题是,似乎没有办法通配proxy_ssl_certificate,proxy_ssl_certificate_key和proxy_ssl_trusted_certificate变量,因为它们需要静态文件路径。
问题:是否有任何方法可以动态配置证书和密钥,即使我们需要承受性能损失?我们知道以下限制,但坦率地说,我们很惊讶为什么互联网上还没有出现解决方案。
这种不支持的原因有2个:
- Nginx需要在启动时加载整个SSL服务器配置,因此当证书或密钥不存在时,它会抛出错误。
- Nginx SSL配置解析器不扩展用户定义的变量,因此它需要相对路径或绝对路径。
点赞
用户2060502
以下是我在一个 OpenResty 模块中使用的 SSL API 调用序列。
ssl.clear_certs()
ssl.cert_pem_to_der()
ssl.set_der_cert()
ssl.priv_key_pem_to_der()
ssl.set_der_priv_key()
实际上,这与 https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/ssl.md#synopsis 上的内容完全相同。
2018-03-06 16:18:29
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

这个问题的解决方案似乎不起作用。以下是代码:
if cert ~= nil and key ~= nil then -- 清除 ssl_certificate 和 ssl_certificate_key 指令在代理.conf 中设置的备用证书和私钥 ngx.log(ngx.DEBUG, 'Clearing fallback certificates'); local ok, err = ssl.clear_certs() if not ok then ngx.log(ngx.ERR, "failed to clear existing (fallback) certificates") return ngx.exit(ngx.ERROR) end ngx.log(ngx.DEBUG, 'Convert private key pem to DER format'); -- key already contains the private key as provided in token local client_key, err = ssl.priv_key_pem_to_der(key); if not client_key then ngx.log(ngx.ERR, "failed to convert PEM priv key to DER: ", err) return end ngx.log(ngx.DEBUG, 'Set private key DER'); ok, err = ssl.set_der_priv_key(client_key) if not ok then ngx.log(ngx.ERR, "failed to set DER priv key: ", err) return end ngx.log(ngx.DEBUG, 'Convert certificate pem to DER format'); -- cert already contains the private key as provided in token local client_cert, err = ssl.cert_pem_to_der(cert); if not client_cert then ngx.log(ngx.ERR, "failed to convert PEM cert to DER: ", err) return end ngx.log(ngx.DEBUG, 'Set certificate DER'); ok, err = ssl.set_der_cert(client_cert) if not ok then ngx.log(ngx.ERR, "failed to set DER cert: ", err) return end end ngx.log(ngx.INFO, 'Passing request to: ', ngx.var.target)输出:
2018/03/06 13:55:31 [debug] 31#0: *12 [lua] analytics_access.lua:270: Clearing fallback certificates 2018/03/06 13:55:31 [debug] 31#0: *12 [lua] analytics_access.lua:277: Convert private key pem to DER format 2018/03/06 13:55:31 [debug] 31#0: *12 [lua] analytics_access.lua:285: Set private key DER 2018/03/06 13:55:31 [debug] 31#0: *12 [lua] analytics_access.lua:292: Convert certificate pem to DER format 2018/03/06 13:55:31 [debug] 31#0: *12 [lua] analytics_access.lua:300: Set certificate DER 2018/03/06 13:55:31 [info] 31#0: *12 [lua] analytics_access.lua:309: Passing request to: https://blah blah...并在控制台上显示: 400 Bad Request 未发送所需的 SSL 证书