Mosquitto - 证书中的客户端代理启用不提供证书的桥

Mosquitto - client broker in certificate enable bridge not presenting certificate

我正在尝试在我的本地网络和云 运行 mqtt 服务器之间建立一个 TLS mqtt 桥,但我无法创建它。

我已经配置了一个代理(称之为 remote_broker)来接受证书验证连接(require_certificate、use_identity_as_username、keyfile、certfile 和 cafile)并在配置客户端证书之后我能够直接发布和订阅主题(使用 mosquitto_pub 和 mosquitto_sub)。

当我尝试配置从另一个代理(称为 local_broker)到远程代理的网桥时,再次使用证书身份验证,它失败了。 remote_broker 中的日志显示一个 openssl 错误,指出“对等方未提供证书”(请参阅​​ remote_broker 日志)。在本地服务器上,连接在 SSL 握手完成之前就被声明为失败(请参阅 local_broker 日志下方),因此甚至没有启动 mqtt 会话。从日志看来,双方都在开始 TLS 握手,但由于客户端没有正确识别自己而失败。

remote_broker 日志:

2020-10-05T23:55:17Z: New connection from 127.0.0.1 on port 8883.
2020-10-05T23:55:17Z: OpenSSL Error[0]: error:1417C0C7:SSL routines:tls_process_client_certificate:peer did not return a certificate
2020-10-05T23:55:17Z: Socket error on client <unknown>, disconnecting.

local_broker 日志:

2020-10-05T23:55:17Z: Bridge local.mqttserver.local-remote doing local SUBSCRIBE on topic shelleys/#
2020-10-05T23:55:17Z: Bridge local.mqttserver.local-remote doing local SUBSCRIBE on topic tele/#
2020-10-05T23:55:17Z: Connecting bridge (step 1) local-remote (localhost:8883)
2020-10-05T23:55:17Z: Connecting bridge (step 2) local-remote (localhost:8883)
2020-10-05T23:55:17Z: Bridge mqttserver.local-remote sending CONNECT
2020-10-05T23:55:17Z: OpenSSL Error[0]: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

local_broker 网桥配置包含在 conf.d 目录中的一个文件中,内容如下(目前我正在使用 ssh 隧道访问云计算机 - 因此是本地主机名作为 remote_broker IP 地址的参考):

connection local_remote
address localhost:8883

topic shelleys/# out
topic tele/# out

bridge_cafile /etc/mosquitto/ca_certificates/RootCA.crt
bridge_certfile /etc/mosquitto/certs/bridgeClient.crt
#bridge_keyfile /etc/mosquitto/certs/bridgeClient.key

参数 bridge_keyfile 被注释掉了,因为桥连接的 local_broker 表现为客户端(或者我理解的)所以不需要它但我尝试取消注释它但是行为没变。

证书由同一个 CA 签署,其 public 证书存在于两个代理中,并在 'bridge_cafile'、local_broker 和 ca_file 在 remote_broker 中。 remote_broker 证书已颁发给 'localhost',因此它与提到的域名地址参数相匹配。

我已经尝试了其他几个可能影响连接行为的桥接 TLS 参数,例如 'bridge_insecure'、'bridge_protocol_version'、'bridge_require_ocsp' 和 'bridge_tls_version',但是 none 改变了行为。

有谁知道 local_broker 网桥客户端发送证书并识别自己的配置中缺少什么?

谢谢。

@hardillb 你是对的。在成功连接后,我已经根据您的评论审查并重复了我的配置。 最终配置如下所示。不知道为什么我之前在 bridge_keyfile 激活时测试它时它不工作。

connection local_remote
address localhost:8883

topic shelleys/# out
topic tele/# out

bridge_cafile /etc/mosquitto/ca_certificates/RootCA.crt
bridge_certfile /etc/mosquitto/certs/bridgeClient.crt
bridge_keyfile /etc/mosquitto/certs/bridgeClient.key

感谢您的帮助。