Kong 网关如何检索客户端证书并设置为 header
Kong gateway how to retrieve client cert and set to header
我正在使用 Kubernetes 和 kong 入口控制器。
我已经设置了客户端、Kong 网关和服务器。
客户端使用 mTLS 连接 Kong 网关,Kong 网关使用普通 HTTP 连接服务器,header 包含客户端证书 pem。
在nginx中我可以简单地添加这个配置。
server{
location / {
proxy_set_header ssl-client-cert $ssl_client_escaped_cert;
}
}
在kong gateway中,我尝试设置helm values.yaml
env.nginx_proxy_proxy_set_header: "ssl-client-cert $ssl_client_escaped_cert"
但是在容器/etc/kong_prefix/nginx-kong.conf
中,看起来是这样的,header没有发出去
server {
proxy_set_header ssl-client-cert $ssl_client_escaped_cert;
}
我尝试使用插件 request-transformer
但它认为 $ssl_client_escaped_cert
是一个纯字符串。
apiVersion: configuration.konghq.com/v1
kind: KongClusterPlugin
metadata:
name: kong-plugin-client-cert-header
annotations:
kubernetes.io/ingress.class: kong
labels:
global: "true"
config:
add:
headers:
- ssl-client-cert: $ssl_client_escaped_cert;
plugin: request-transformer
如何获取客户端证书并将其作为 header 发送到服务器?
您可以使用Kong Function插件进行自定义转换。从该插件中,您可以使用所有可用的 Nginx 变量:
例如,您的插件可以配置为:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: kong-plugin-client-cert-header
config:
access:
- |
kong.service.request.set_header('ssl-client-cert', ('--' or ngx.var.ssl_client_escaped_cert))
plugin: post-function
我用过这个配置。我为我工作。
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: kong-plugin-client-cert-header
config:
access:
- |
kong.service.request.set_header('ssl-client-cert', ngx.var.ssl_client_escaped_cert or '')
plugin: post-function
我结合Keycloak client certificate lookup使用了这个函数。
我正在使用 Kubernetes 和 kong 入口控制器。 我已经设置了客户端、Kong 网关和服务器。 客户端使用 mTLS 连接 Kong 网关,Kong 网关使用普通 HTTP 连接服务器,header 包含客户端证书 pem。
在nginx中我可以简单地添加这个配置。
server{
location / {
proxy_set_header ssl-client-cert $ssl_client_escaped_cert;
}
}
在kong gateway中,我尝试设置helm values.yaml
env.nginx_proxy_proxy_set_header: "ssl-client-cert $ssl_client_escaped_cert"
但是在容器/etc/kong_prefix/nginx-kong.conf
中,看起来是这样的,header没有发出去
server {
proxy_set_header ssl-client-cert $ssl_client_escaped_cert;
}
我尝试使用插件 request-transformer
但它认为 $ssl_client_escaped_cert
是一个纯字符串。
apiVersion: configuration.konghq.com/v1
kind: KongClusterPlugin
metadata:
name: kong-plugin-client-cert-header
annotations:
kubernetes.io/ingress.class: kong
labels:
global: "true"
config:
add:
headers:
- ssl-client-cert: $ssl_client_escaped_cert;
plugin: request-transformer
如何获取客户端证书并将其作为 header 发送到服务器?
您可以使用Kong Function插件进行自定义转换。从该插件中,您可以使用所有可用的 Nginx 变量:
例如,您的插件可以配置为:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: kong-plugin-client-cert-header
config:
access:
- |
kong.service.request.set_header('ssl-client-cert', ('--' or ngx.var.ssl_client_escaped_cert))
plugin: post-function
我用过这个配置。我为我工作。
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: kong-plugin-client-cert-header
config:
access:
- |
kong.service.request.set_header('ssl-client-cert', ngx.var.ssl_client_escaped_cert or '')
plugin: post-function
我结合Keycloak client certificate lookup使用了这个函数。