2

我已经成功地为一个 API 安装了 kong 网关,该 API 通过上游到多个目标(应用程序服务器)进行负载平衡。

现在,我的应用程序服务器有一个自签名证书, kong 和 targets 之间的 ssl 握手应该失败。我推断 kong 不验证上游证书。

经过一些研究,我发现ssl_proxy on;nginx 的配置可以做到这一点。

我想在 openresty 中找到一个等效的东西来验证上游的 ssl 证书。

解决方案可能是修改 kong nginx 配置以激活ssl_proxy但在同一实例上使用不同目标时很糟糕。

4

3 回答 3

2

我本来希望您以相反的方式进行操作:让您的后端服务在联系您的服务时验证 Kong 是否具有特定的 SSL 证书,这样实际上只有 Kong 可以连接到服务,因此,任何 API 客户端必须通过Kong连接。

我们使用 Kong 0.11.0 为 wicked.haufe.io 执行此操作,您可以nginx_conf.lua在此处找到合适的文件:https ://github.com/apim-haufe-io/wicked.kong/blob/master/templates/nginx_kong .lua

这里有趣的一点是:

proxy_ssl_certificate /root/proxy-cert.pem;
proxy_ssl_certificate_key /root/proxy-key.pem;

它指定了 nginx 用来对后端服务进行代理调用的证书和密钥。孔子对此很在意。

通过检查我们为 wicked.haufe.io 的 Kong docker 映像所做的工作,您应该能够适应自己的需求;另一个有趣的startup.sh地方是,从环境变量中提取证书/密钥并添加到/root/proxy-...pem文件中。

于 2017-11-02T12:59:54.227 回答
1

通过设置以下环境变量,我设法让它与 Kong 0.14.x 一起使用: KONG_NGINX_HTTP_PROXY_SSL_VERIFY: "on" KONG_NGINX_HTTP_PROXY_SSL_TRUSTED_CERTIFICATE: "/mnt/certs/ca.crt" (调整后者以指向您的自定义 CA 证书文件。)

这使用“KONG_NGINX_HTTP_”前缀来设置任意 nginx 'http' 设置。

不过,这似乎不适用于 Kong 1.0.x。目前正在努力寻找解决方案...

于 2019-02-08T02:40:42.077 回答
0

注意 kong 配置中对 client_ssl 的注释:

If 'client_ssl' is enabled, the absolute path to the client SSL certificate for the 'proxy_ssl_certificate directive. Note that this value is statically defined on the node, and currently cannot be configured on a per-API basis.

目前是不可能的。

于 2017-11-02T14:25:26.773 回答