2017-07-27 4 views
0

Nous avons utilisé AWS iOS IoT SDK avec la configuration ssl. Nous avons suivi https://github.com/awslabs/aws-sdk-ios-samples/tree/master/IoT-Sample/Swift comme référence. Voici notre point final de serveur sera le formatUtilisation de aws ios iot sdk pour notre propre serveur mqtt dans ios

https://xxxxxxxxxx.iot ..amazonaws.com

Nous avons importé fichier pkcs12 dans un paquet et en mesure de connexion, publier, abonnez-vous au serveur. Plus tard, nous avons pensé à avoir une solution de réseau local au sein de notre organisation pour cela, Nous avons mis en place rabbitmq pour courtier MQTT pour serverhttps: //www.rabbitmq.com/ssl.html#keys-and-certs. Actuellement, nous essayons d'utiliser une instance ec2, cette dernière va configurer le serveur local. Et le point final est

ssl: //ec2-..compute.amazonaws.com: 8883

Maintenant, je suis incapable de se connecter à rabbitmq serveur à l'aide aws IOT ios sdk.

Mais si j'utilise l'exemple https://github.com/emqtt/CocoaMQTT, je peux me connecter au point de terminaison du serveur aws iot, point final du serveur rabbitmq. Que dois-je faire maintenant pour me connecter au point de terminaison du serveur rabbitmq en utilisant aws iot ios sdk https://github.com/aws/aws-sdk-ios/tree/master/AWSIoT. Quelles modifications je devrais faire dans sdk? Ci-dessous sont les journaux lorsque vous essayez de vous connecter au serveur rabbitmq en utilisant aws iot ios sdk.

2017-07-27 12:56:55:860 sample[2124:1004208] hostName: ec2-<ip>.<region>.compute.amazonaws.com 
2017-07-27 12:56:55:861 sample[2124:1004208] URL: ssl://ec2-<ip>.<region>.compute.amazonaws.com 
2017-07-27 12:56:55:875 sample[2124:1004208] -[MQTTSession initWithClientId:userName:password:keepAlive:cleanSession:willTopic:willMsg:willQoS:willRetainFlag:runLoop:forMode:] [Line 169], Thread:<NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:55:875 sample[2124:1004208] +[MQTTMessage connectMessageWithClientId:userName:password:keepAlive:cleanSession:willTopic:willMsg:willQoS:willRetain:] [Line 68], Thread:<NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:55:875 sample[2124:1004208] Creating MQTTMessage with raw data >>>>> <00044d51 54540406 003c0004 696f732d 0017746f 7069632f 77726974 652f736f 75726365 2f757365 7200787b 22636c69 5f657665 6e745f69 64223a22 636c695f 6576656e 745f7573 65725f31 35303131 34303431 352e3832 37393422 2c22736f 75726365 223a2273 6f757263 65222c22 73656e64 65725f69 64223a22 75736572 222c2265 76656e74 5f747970 65223a22 4c415354 5f57494c 4c5f4d45 53534147 45227d> <<<<< 
2017-07-27 12:56:55:879 sample[2124:1004208] Initializing MQTTEncoder and MQTTDecoder streams 
2017-07-27 12:56:55.882561+0530 sample[2124:1004208] ChatViewController: connection status = Connecting 1 
2017-07-27 12:56:55:880 sample[2124:1004208] opening encoder stream. 
2017-07-27 12:56:55:880 sample[2124:1004208] opening decoder stream. 
2017-07-27 12:56:55:946 sample[2124:1004208] -[MQTTDecoder stream:handleEvent:] [Line 64] EventCode:1, stream: <__NSCFInputStream: 0x170112870>, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:55:947 sample[2124:1004208] -[MQTTEncoder stream:handleEvent:] [Line 71] EventCode:1, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:56.002911+0530 sample[2124:1004208] CFNetwork SSLHandshake failed (-9807) 
2017-07-27 12:56:56:003 sample[2124:1004208] -[MQTTDecoder stream:handleEvent:] [Line 64] EventCode:8, stream: <__NSCFInputStream: 0x170112870>, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:56:003 sample[2124:1004208] -[MQTTSession decoder:handleEvent:] [Line 471] eventCode:2 
2017-07-27 12:56:56:004 sample[2124:1004208] MQTT session error, code: 3 
2017-07-27 12:56:56:004 sample[2124:1004208] closing encoder stream. 
2017-07-27 12:56:56:005 sample[2124:1004208] closing decoder stream. 
2017-07-27 12:56:57:008 sample[2124:1004208] MQTTSessionDelegate handleEvent: 3 
2017-07-27 12:56:57:008 sample[2124:1004208] MQTT session connection error 
2017-07-27 12:56:57.010082+0530 sample[2124:1004287] Chat :Alive service stop 
2017-07-27 12:56:57.010521+0530 sample[2124:1004208] ChatViewController: connection status = Disconnected 5 
2017-07-27 12:56:57.016899+0530 sample[2124:1004208] Chat :viewDidDisappear 
2017-07-27 12:56:57:009 sample[2124:1004208] setting up reconnectTimer. 
2017-07-27 12:56:58:010 sample[2124:1004208] Trying to reconnect to session. 
2017-07-27 12:56:58:011 sample[2124:1004208] Initializing MQTTEncoder and MQTTDecoder streams 
2017-07-27 12:56:58:011 sample[2124:1004208] opening encoder stream. 
2017-07-27 12:56:58:011 sample[2124:1004208] opening decoder stream. 
2017-07-27 12:56:58:075 sample[2124:1004208] -[MQTTDecoder stream:handleEvent:] [Line 64] EventCode:1, stream: <__NSCFInputStream: 0x170112bd0>, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:58:075 sample[2124:1004208] -[MQTTEncoder stream:handleEvent:] [Line 71] EventCode:1, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:58.127802+0530 sample[2124:1004208] CFNetwork SSLHandshake failed (-9807) 
2017-07-27 12:56:58:128 sample[2124:1004208] -[MQTTDecoder stream:handleEvent:] [Line 64] EventCode:8, stream: <__NSCFInputStream: 0x170112bd0>, Thread: <NSThread: 0x170068000>{number = 1, name = main} 
2017-07-27 12:56:58:128 sample[2124:1004208] -[MQTTSession decoder:handleEvent:] [Line 471] eventCode:2 
2017-07-27 12:56:58:128 sample[2124:1004208] MQTT session error, code: 3 
2017-07-27 12:56:58:128 sample[2124:1004208] closing encoder stream. 
2017-07-27 12:56:58:128 sample[2124:1004208] closing decoder stream. 
2017-07-27 12:56:59:129 sample[2124:1004208] MQTTSessionDelegate handleEvent: 3 
2017-07-27 12:56:59:130 sample[2124:1004208] MQTT session connection error 
2017-07-27 12:56:59.131627+0530 sample[2124:1004299] Chat :Alive service stop 
2017-07-27 12:56:59.132071+0530 sample[2124:1004208] ChatViewController: connection status = Disconnected 5 

Répondre

0

Quel est votre objectif? Voulez-vous tester un courtier MQTT local ou voulez-vous exécuter votre propre courtier MQTT et utiliser le SDK AWS iOS IoT pour vous y connecter?

Si vous voulez gérer vos propres courtiers, je vous conseille de bien réfléchir à ce sujet car il devient difficile à l'échelle. Je n'ai pas essayé d'utiliser les SDK AWS IoT par rapport à un courtier local, mais votre journal indique que l'établissement de liaison SSL a échoué. Je vais deviner que c'est parce que l'authentification mutuelle entre votre application et RabbitMQ a échoué en raison du certificat du serveur ne correspond pas.

AWS IdO utilise l'authentification mutuelle non seulement l'authentification du client pour établir la confiance: http://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html

Vous devez faire deux choses 1) Identifier dans le SDK iOS où le serveur AWS IdO CA est défini (https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem) et de le remplacer avec l'autorité de certification de votre courtier RabbitMQ, 2) Configurez RabbitMQ pour une authentification mutuelle (si elle est prise en charge).

Bonne chance.

+0

Merci pour la réponse, Oui, je veux exécuter mon propre courtier MQTT et utiliser le SDK AWS iOS IoT pour s'y connecter? J'ai pu me connecter à notre propre courtier MQTT et serveur AWS IOT en utilisant la bibliothèque tierce CocoaMQTT. Mais impossible de se connecter à notre propre courtier MQTT en utilisant AWS IOS IoT SDK. Ce qui signifie qu'en éditant ou en configurant quelque chose dans AWS IOT IOS SDK, je devrais être capable de me connecter à notre propre courtier MQTT et de me connecter aux deux en utilisant CocoaMQTT. Je voudrais juste savoir, que dois-je changer pour cela? –

+0

Je ne suis pas un développeur iOS, mais si vous regardez ici les internes du SDK https://github.com/aws/aws-sdk-ios/blob/master/AWSIoT/Internal/MQTTSDK/MQTTSession.m # L238 vous pouvez voir où la session MQTT est configurée et SSL peut être activé et désactivé. Si vous désactivez SSL, la connexion fonctionne-t-elle? Si vous n'allez pas utiliser le service AWS IoT, je vous recommande d'utiliser un autre client MQTT. – Graham

+0

En regardant les documents du plugin RabbitMQ MQTT https://www.rabbitmq.com/mqtt.html, il semble que RabbitMQ utilise le nom d'utilisateur/mot de passe par défaut pour l'authentification. Avez-vous activé l'authentification avec les certificats client SSL? – Graham