KONG/NGINX 将证书信息传递给 APACHE

KONG/NGINX 将证书信息传递给 APACHE

我们已设置 Kong API 网关(在后台运行 NGINX),其中一个上游是 apache 服务器,我们想要在其上进行客户端证书验证。

我正在运行测试,curl我请求 kong(nginx),他将请求转发给 apache。我正在使用curl --cert cert.crt --key key.key "https://kongurl.com/blabla"

在 nginx 端,我设置了一个自定义日志来查看证书(至少是序列号)是否正在发送,并且我可以看到它:

log_format combined_sslclient '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$ssl_client_s_dn($ssl_client_serial)"';
access_log log/access.log combined_sslclient;

然后我看到了这个log/access.log

123.123.123.123 - - [01/Oct/2020:15:52:33 +0200] "GET /my/custom/path HTTP/1.1" 204 0 "-" "curl/7.68.0" "CN=CERT_CN,OU=CERT_OU,O=CERT_O,C=CERT_C(CERT_SERIAL_NUMBER)"

然后在 NGINX 上我也具有这些 SSL 属性:

server {
...
proxy_set_header X-SSL-CERT $ssl_client_serial;
ssl_verify_client on;
...
}

然后在 apache 端,我设置了取证模块来读取传入请求的所有标头,但我只能看到其他内容……而不是 X-SSL-CERT。以下是 apache 端取证的日志:

+289:5f75df21:1|GET /my/custom/path HTTP/1.1|Host:mykonghost%3a8412|Connection:keep-alive|X-Forwarded-For:10.1.1.1|X-Forwarded-Proto:https|X-Forwarded-Host:mykonghost|X-Forwarded-Port:8443|X-Real-IP:10.1.1.1|User-Agent:curl/7.68.0|Accept:*/*|X-Consumer-ID:d853e4d0-f8f1-4dcf-8fa7-58d3b2c67ee0|X-Consumer-Username:anonymous|X-Consumer-Custom-ID:nil|X-Anonymous-Consumer:true
-289:5f75df21:1

正如您所看到的... 有一些其他的标头传过来了,但是没有传过来有关证书的内容。

我已经尝试发送不同的 nginx ssl 变量,但到目前为止没有运气...我遗漏了什么吗?

更新:

看起来问题甚至不在于证书变量...我将 nginx 更改为:

proxy_set_header HTTP_X_TESTING 'bar';

我仍然无法在 apache 端看到它

答案1

我可以通过将 放在proxy_set_header里面location{}而不是server{}块中来解决这个问题。

相关内容