Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过SSL/TLS通过节点mqtt客户端连接到mosquitto代理时出现问题_Node.js_Ssl_Mqtt - Fatal编程技术网

Node.js 通过SSL/TLS通过节点mqtt客户端连接到mosquitto代理时出现问题

Node.js 通过SSL/TLS通过节点mqtt客户端连接到mosquitto代理时出现问题,node.js,ssl,mqtt,Node.js,Ssl,Mqtt,Hello,我通过EclipseDocker映像创建了一个mosquitto代理,最近按照此指南添加了SSL/TLS支持: 当我在运行代理的VPS中sshed时,我可以使用以下命令: mosquitto_pub -h VPS_NAME -t test/topic -p 8883 --cafile ca.crt -m message -u BROKER_USERNAME -P BROKER_PASSWORD 它出版了所有精美的书籍。但是,当我在本地计算机上运行相同的命令时,会出现以下错误: 'U

Hello,我通过EclipseDocker映像创建了一个mosquitto代理,最近按照此指南添加了SSL/TLS支持:

当我在运行代理的VPS中sshed时,我可以使用以下命令:

mosquitto_pub -h VPS_NAME -t test/topic -p 8883 --cafile ca.crt -m message -u BROKER_USERNAME -P BROKER_PASSWORD
它出版了所有精美的书籍。但是,当我在本地计算机上运行相同的命令时,会出现以下错误:

'Unable to connect (Lookup error.).
我没有从代理容器中获得任何新日志,因此我认为它甚至没有到达容器。然而,当我跑步时:

mosquitto_pub -h BROKER_IP_ADRESS -t test/topic -p 8883 --cafile ca.crt -m message -u BROKER_USERNAME -P BROKER_PASSWORD
我确实得到了一个错误响应:发生了TLS错误,在我的docker日志中我得到:

1583004287: New connection from LOCAL_IP_ADDRESS on port 8883.
1583004287: OpenSSL Error: error:14037438:SSL routines:ACCEPT_SR_KEY_EXCH:tlsv1 alert internal error
1583004287: OpenSSL Error: error:140370E5:SSL routines:ACCEPT_SR_KEY_EXCH:ssl handshake failure
1583004287: Socket error on client <unknown>, disconnecting.
当我运行此程序时,我会不断收到断开连接事件,在docker日志中,我会收到:

1583004505: New connection from LOCAL_IP_ADDRESS on port 8883.
1583004505: OpenSSL Error: error:140260FC:SSL routines:ACCEPT_SR_CLNT_HELLO:unknown protocol
1583004505: Socket error on client <unknown>, disconnecting.
158304505:从端口8883上的本地IP地址建立新连接。
1583004505:OpenSSL错误:错误:140260FC:SSL例程:接受\u SR\u CLNT\u HELLO:未知协议
15830404505:客户端上的套接字错误,正在断开连接。
我真的很困惑如何解决这个问题,我已经能够连接到没有SSL/TLS保护的代理,但我想让我的设备通信更安全。
谢谢你抽出时间

2个单独的问题

  • 看起来您的VPS没有有效的DNS条目
    mosquitto_pub
    失败,因为它无法将名称解析为IP地址。它与
    --unsecure
    和IP地址一起工作,因为您告诉
    mosquitto_pub
    忽略代理证书中的CN或SAN不包括IP地址而只包括名称这一事实

  • 如果您试图通过TLS连接原始MQTT而不是MQTT,则需要使用URL,而不仅仅是主机名或
    connect()
    函数的第一个参数。e、 g

    this.mqttClient = mqtt.connect("mqtts://" + this.host, optionsz);
    
  • 老实说,你需要解决这两个问题才能让事情正常运转


    要修复1,您需要对DNS条目进行排序,以便您有一个有效的完全限定主机名,该主机名指向您的VPS,并与您在那里部署的证书相匹配。

    2此处有单独的问题

  • 看起来您的VPS没有有效的DNS条目
    mosquitto_pub
    失败,因为它无法将名称解析为IP地址。它与
    --unsecure
    和IP地址一起工作,因为您告诉
    mosquitto_pub
    忽略代理证书中的CN或SAN不包括IP地址而只包括名称这一事实

  • 如果您试图通过TLS连接原始MQTT而不是MQTT,则需要使用URL,而不仅仅是主机名或
    connect()
    函数的第一个参数。e、 g

    this.mqttClient = mqtt.connect("mqtts://" + this.host, optionsz);
    
  • 老实说,你需要解决这两个问题才能让事情正常运转


    要修复1,您需要对DNS条目进行排序,以便拥有一个有效的完全限定主机名,该主机名指向您的VPS,并与您在那里部署的证书相匹配。

    嘿,感谢您的响应!例如,假设我的主机名是“example”,我在证书注册期间使用了它。我所需要做的就是买一个域名(例如:example.xyz),让我的VPS重定向到ip。我是否需要重新创建FQDN为example.xyz的证书,还是只是一个示例?再次非常感谢!您的证书需要包含
    example.xyz
    ,它需要与用于查找机器的fqdn完全匹配。感谢您的响应!例如,假设我的主机名是“example”,我在证书注册期间使用了它。我所需要做的就是买一个域名(例如:example.xyz),让我的VPS重定向到ip。我是否需要重新创建FQDN为example.xyz的证书,还是只是一个示例?再次非常感谢!您的证书需要包含
    example.xyz
    ,它需要与用于查找计算机的fqdn完全匹配