我尝试将我的 [laravel] Web 应用程序连接到 [mqtt] 代理 eclipse-mosquitto。代理在与应用程序不同的服务器上运行。我想知道如何在我的网络应用程序中配置 .env 文件。实际上,我只能在没有 [TLS] 的情况下进行连接。
这是我的 Web 应用程序的 .env 文件:
MQTT_HOST=//mosquitto
MQTT_PORT=8883
MQTT_TLS_ENABLED=true
MQTT_TLS_ALLOW_SELF_SIGNED_CERT=true
MQTT_TLS_CA_FILE=/usr/local/share/ca-certificates/ca.crt
MQTT_TLS_CA_PATH=/usr/local/share/ca-certificates
MQTT_TLS_CLIENT_CERT_FILE=/usr/local/share/ca-certificates/server.crt
MQTT_TLS_CLIENT_CERT_KEY_FILE=/usr/local/share/ca-certificates/server.key
我已经使用命令行realpath找到了绝对路径。
这里是 mqtt-client.php 的片段:
// The TLS settings used for the connection. Must match the specified port.
'tls' => [
'enabled' => env('MQTT_TLS_ENABLED', false),
'allow_self_signed_certificate' => env('MQTT_TLS_ALLOW_SELF_SIGNED_CERT', false),
'verify_peer' => env('MQTT_TLS_VERIFY_PEER', true),
'verify_peer_name' => env('MQTT_TLS_VERIFY_PEER_NAME', true),
'ca_file' => env('MQTT_TLS_CA_FILE'),
'ca_path' => env('MQTT_TLS_CA_PATH'),
'client_certificate_file' => env('MQTT_TLS_CLIENT_CERT_FILE'),
'client_certificate_key_file' => env('MQTT_TLS_CLIENT_CERT_KEY_FILE'),
'client_certificate_key_passphrase' => env('MQTT_TLS_CLIENT_CERT_KEY_PASSPHRASE'),
],
通过此设置,我收到此错误: PhpMqtt\Client\Exceptions\ConfigurationInvalidException 证书颁发机构文件设置必须包含常规文件的路径。
我尝试添加引号、双引号和大括号,但没有任何效果。
错误消息似乎是直接从 [php-mqtt/laravel-client] 提供的,而不是从 mqtt 代理提供的。
有人知道我做错了什么吗?
谢谢!
我的问题是访问证书颁发机构文件。我的泊坞窗无权访问我放置文件的目录。我已将证书颁发机构文件更改为我的 docker 可以访问的目录,现在可以使用了。
有github问题的链接。