SSL终止期间自定义haproxy X-ForwardedFor ssl_c_s_dn的格式

SSL终止期间自定义haproxy X-ForwardedFor ssl_c_s_dn的格式

我在 Alpine Docker 容器中运行 haproxy。它正在为 https 执行 SSL 终止并将客户端 DN 注入 X-ForwardedFor HTTP 标头。但它对客户端 DN 使用的格式不是我的应用程序支持的格式。

我可以以某种方式更改格式吗,例如使用 openssl.cnf?人们显然以这种方式更改加密算法设置。我也可以更改我的 DN 格式吗?

这是我需要在 X-ForwardedFor 标头中显示的证书 DN 格式。它相当符合 LDAP 规范。

CN=Jane Smith,OU=org1,OU=org2,O=myorg,C=AU

但是 haproxy 注入的是一种类似 ASN.1 的格式

/C=AU/O=myorg/OU=org2/OU=org1/CN=Jane Smith

这些是软件的版本。它们可以更改,因为我正在从源代码编译 haproxy。我还可以在编译时设置任何标志:

  1. Haproxy 2.0
  2. Alpine 3.10
  3. openssl 1.1.1

以下是我认为的 haproxy.cfg 文件的相关部分。

frontend fe
    mode http
    bind *:443 ssl no-sslv3 no-tls10 no-tlsv11 crt /certs/mycert ca-file /certs/myca
    option forwardfor
    http-request set-header X-ForwardedFor %{+Q+E}[ssl_c_s_dn]
    default_backend be

backend be 
   balance source
   mode http
   server server1 IP:PORT ca-file /certs/myca crt /certs/mycert ssl verify none

我可以做些什么来改变格式?我尝试使用这样的记录结构:%{+Q+E}[ssl_c_s_dn(CN)],但我的证书 DN 的格式非常混乱。无法预测可能有多少个 OU、C、O 等,有时它们会丢失。所以我认为这不是一个可行的解决方案。

我也研究过这个问题:haproxy tls哈希算法使用 openssl 设置自定义 haproxy 行为。我可以这样做来将 DN 转换为不同的格式吗?如果可以,怎么做?我不确定要遵循哪些步骤。我需要在编译时修改 openssl.cnf,还是在服务器上运行时更改它?哪些部分和值?

答案1

看起来您已成功将补丁合并到 HAProxy[1] 中,并且该补丁将在 2.2 版本发布时发布。

从 2.2 文档[2] 来看,用法如下

frontend fe
    mode http
    bind *:443 ssl no-sslv3 no-tls10 no-tlsv11 crt /certs/mycert ca-file /certs/myca
    option forwardfor
    http-request set-header X-ForwardedFor %{+Q+E}[ssl_c_s_dn(,0,rfc2253)]
    default_backend be

backend be 
   balance source
   mode http
   server server1 IP:PORT ca-file /certs/myca crt /certs/mycert ssl verify non

[1]https://git.haproxy.org/?p=haproxy.git;a=commit;h=71f829767d3a5f8e2f309862b1e606bb03323878

[2]http://cbonte.github.io/haproxy-dconv/2.2/configuration.html#7.3.4-ssl_c_s_dn

相关内容