Hi.
HAProxy 支持使用 send-proxy-v2 配置传递 SSL 证书信息,如 cn 等参数,是否在后续的版本考虑将其也一并支持将 cn 等作为 clientid 而不仅在 TLS 连接中支持。
Hi.
HAProxy 支持使用 send-proxy-v2 配置传递 SSL 证书信息,如 cn 等参数,是否在后续的版本考虑将其也一并支持将 cn 等作为 clientid 而不仅在 TLS 连接中支持。
你把 emqx.conf 里,mqtt.peer_cert_as_clientid 设置为 cn 可以吗?
设置过了哈,
单节点使用 TLS 的时候没问题,集群(HAProxy)情况下就没办法。
那就很奇怪了,我知道你只要使用了 proxy protocol v2 (HAProxy 和 EMQX 的监听器都要设置),CN 就能传过来了,然后 peer_cert_as_clientid 配置就能生效。
是的,我测试了下,read-ip 能过来,但是 cn 就没办法提取出来
我刚才找了下 emqx 源码(但我不会 erlang…),关键字:pp2_ssl_cn,就在 ws 跟 ocpp gateway 这两个 listener 里边找到提取操作。
希望能提供一点思路。
哦 你用的 Websocket 吗?那可能没有的, TCP listener 有这个功能。
看到了,Websocket 和 TCP 都支持从 ProxyProtocol 读取 CN 的值,不清楚是哪儿发生了问题。
代码在这儿:
esockd 获取 CN 的地方
https://github.com/emqx/esockd/blob/5.11.1/src/esockd_peercert.erl#L37C1-L37C12
emqx 调用 esockd 获取 CN 的地方:
Erlang VM 里生产环境安全地 trace 一个函数的办法:
emqx remote_console
recon_trace:calls({esockd_peercert, common_name, fun(_) -> return_trace() end}, 5, [{scope, local}]).
上面的 trace 语句打印 5 次 esockd_peercert:common_name
函数的调用,然后自动停止 trace。
感谢支持。
我也看到了 issue 里边的一些 guideline,然后确实是我 HAProxy 的配置没写对,应使用 send-proxy-v2-ssl-cn 而不是单纯使用 send-proxy-v2。
抱歉没做好测试就提出这个问题。。
https://github.com/emqx/emqx/blob/v5.6.0/scripts/test/start-two-nodes-in-docker.sh#L170