2017-02-14 31 views
0

とTLSエラー接続IはPHP MQTTクライアントと私のブローカーとの間の接続をやろうとしているが、私はこのエラーを取得しています:Mosquitto - PHP - ブローカー

Fatal error: Uncaught exception 'Mosquitto\Exception' with message 'A TLS error occurred.' in /path/testemqtt.php:27 Stack trace: #0 /path/testemqtt.php(27): Mosquitto\Client->connect('localhost', 9419) #1 {main} thrown in /path/testemqtt.php on line 27

私はすでにやりました同じJavaAndroidJavascript (w/ node.js)のような他の言語での接続が、PHPに私はいくつかの困難に直面しています...ここでは動作しないコードは次のとおりです。ここで

ini_set('display_errors',1);error_reporting(E_ALL); 

    /* Construct a new client instance, passing a client ID of “MyClient” */ 
$client = new Mosquitto\Client('PHPClient',true); 

/* Set the callback fired when the connection is complete */ 
$client->onConnect(function($code, $message) use ($client) { 
    /* Subscribe to the broker's $SYS namespace, which shows debugging info */ 
    echo $code .' - '.$message; 
    $client->subscribe('pedro/php', 1); 
}); 

/* Set the callback fired when we receive a message */ 
$client->onMessage(function($message) { 
    /* Display the message's topic and payload */ 
    echo $message->topic, "\n", $message->payload, "\n\n"; 
}); 

/* Connect, supplying the host and port. */ 


$client->setCredentials('username', 'password'); 
$client->setTlsCertificates('ca.crt', 'ca_client.crt', 'client.key', null); //As my TLS/SSL certificate is one way I dont need to use passphrase to connect to the broker 
$client->setTlsOptions(Mosquitto\Client::SSL_VERIFY_PEER,"tlsv1",null); 
$client->connect('localhost', 8883); 

/* Enter the event loop */ 
$client->loopForever(); 

がで、実装の一例です(それは魔法のように動作します):

var KEY = fs.readFileSync('client.key'); 

var CERT = fs.readFileSync('client.crt'); 

var CAfile = fs.readFileSync('ca.crt'); 

var MQTToptions = { 
        host: 'localhost', 
        clientId: 'pedroNodeJS', 
        username: 'username', 
        password: 'password', 
        port: 8883, 
        ca: CAfile, 
        keyPath: KEY, 
        certPath: CERT, 
        secureProtocol: 'TLSv1_method', 
        protocol: 'mqtts', 
        protocolId: 'MQIsdp', 
        protocolVersion: 3, 
        rejectUnauthorized: false, 
        connectTimeout: 2000, 
        keepalive:0, 
        reschedulePings: false 
       }; 


var client = mqtt.connect(MQTToptions); 

明らかPHPコードが正しいので、私は、問題が何であるかを知りません。

私は私の実装では、この参照を使用しました:すべての助けを

MQTT Client Library Encyclopedia – Mosquitto-PHP

Git - Mosquitto-PHP

Development guide

感謝を!

答えて

0

私はこの質問が少し古いと知っていますが、Googleから来る人は同じ問題があり、使用していたCA証明書に問題があることが判明しました。

setTlsCertificatesメソッドの最初のパラメータを私のシステムのデフォルトのトラスト/ CAストアを指すように設定しました。これはDebianで/etc/ssl/certs/ca-certificates.crtになりました。

もちろん、サーバーが自己署名証明書を使用している場合は、これを実行しません。問題が実際にCA証明書であることを確認する簡単な方法は、サーバ確認を一時的に無効にするためにsetTlsOptionsSSL_VERIFY_PEERの代わりにSSL_VERIFY_ΝΟΝΕを使用することです。

関連する問題