与不同 CA 的 MQTT MTLS 连接

MQTT MTLS connection with different CA

我正在尝试在 MQTT 中进行 mtls 身份验证。我正在使用蚊子来实现这一目标。当我从同一个 CA 创建服务器和客户端证书时,连接成功。但是,如果我使用不同的 CA 创建客户端证书,则会失败并显示以下消息

Client null sending CONNECT
OpenSSL Error[0]: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca
Error: The connection was lost.

mtls 中的客户端和服务器证书是否必须使用相同的 CA?

Mosquitto.conf

listener 8883
certfile C:\server.crt
keyfile C:\server.key
require_certificate true
cafile C:\mqtt-ssl-demo\ca.crt
allow_anonymous true

运行 经纪人使用

mosquitto -c "C:\Program Files\mosquitto\mosquitto.conf"

使用服务器证书 ca 签名的证书订阅客户端 [SUCCESS]

mosquitto_sub --cafile C:\mqtt-ssl-demo\ca.crt -t test -d -h Computername -p 8883 --cert C:\mqtt-ssl-demo\client.crt --key C:\mqtt-ssl-demo\client.key

使用其他 ca 签名的证书订阅客户端 [FAILURE]

mosquitto_sub --cafile C:\mqtt-ssl-demo\ca.crt -t test -d -h Computername -p 8883 --cert C:\mqtt-ssl-demo\otherclient.crt --key C:\mqtt-ssl-demo\otherclient.key

使用 Mosquitto SSL Configuration -MQTT TLS Security

创建了证书

这里要认识到的重要一点是,作为配置的一部分传递给代理的 CA 文件用于验证任何连接客户端的证书。

传递给客户端的 CA 文件 (mosquitto_sub) 用于验证代理提供的证书。

因此,如果您使用不同的 CA,那么这些文件需要不同,从您发布的内容中不清楚您在何处使用哪些 CA 证书。