2017-07-27 101 views
0

我們使用AWS iOS IoT SDK和ssl配置。我們按照https://github.com/awslabs/aws-sdk-ios-samples/tree/master/IoT-Sample/Swift作爲參考。 這裏,我們的服務器的終點將是格式在ios中使用aws ios iot sdk爲我們自己的mqtt服務器

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

我們進口PKCS12文件中捆綁並能夠連接,發佈,訂閱服務器。

後來我們想到在我們的組織內部有本地網絡解決方案,我們爲服務器MQTT代理設置rabbitmqhttps://www.rabbitmq.com/ssl.html#keys-and-certs。目前,我們正在嘗試使用ec2實例,後者將設置本地服務器。和終點是

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

現在我無法連接使用AWS IOT IOS SDK來的RabbitMQ服務器。

但是,如果我使用https://github.com/emqtt/CocoaMQTT示例,我可以連接到aws iot服務器端點,rabbitmq服務器端點。

現在我應該做些什麼來使用aws ios ios sdk https://github.com/aws/aws-sdk-ios/tree/master/AWSIoT連接到rabbitmq服務器端點。我應該在sdk中做什麼編輯?

下面是使用aws iot ios sdk嘗試連接到rabbitmq服務器時的日誌。

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 

回答

0

你的目標是?您是否希望本地MQTT代理進行測試,還是希望運行自己的MQTT代理並使用AWS iOS IoT SDK連接到它?

如果你想經營自己的經紀人,我建議你仔細考慮一下,因爲它在規模上變得困難。我沒有嘗試對本地代理使用AWS IoT SDK,但您的日誌顯示SSL握手失敗。我猜測這是因爲您的應用程序和RabbitMQ之間的相互身份驗證失敗,原因是服務器證書不匹配。

AWS物聯網使用相互認證不只是客戶端身份驗證來建立信任:http://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html

你需要做兩件事情1)在iOS的SDK,其中AWS物聯網服務器CA設置(https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem確定)並更換爲您的RabbitMQ代理提供CA,2)配置RabbitMQ進行相互認證(如果支持)。

祝你好運。

+0

感謝您的回答,是的,我想運行自己的MQTT代理並使用AWS iOS IoT SDK連接到它? 我能夠使用第三方庫CocoaMQTT連接到我們自己的MQTT代理和AWS IOT服務器。但無法使用AWS IOS IoT SDK連接到我們自己的MQTT代理。這意味着通過編輯或配置AWS IOT IOS SDK中的某些東西,我應該能夠連接到我們自己的MQTT代理以及我可以使用CocoaMQTT連接到兩者。 我只想知道,我應該改變什麼? –

+0

我不是一個iOS開發者,但是如果你看看SDK的內部https://github.com/aws/aws-sdk-ios/blob/master/AWSIoT/Internal/MQTTSDK/MQTTSession。在m#L238中,您可以看到MQTT會話的配置位置,並且可以啓用和禁用SSL。如果您禁用SSL,連接是否可以正常工作?如果您不打算使用AWS IoT服務,則建議使用其他MQTT客戶端。 – Graham

+0

查看RabbitMQ MQTT插件文檔https://www.rabbitmq.com/mqtt.html它看起來像RabbitMQ默認使用用戶名/密碼進行身份驗證。您是否啓用了SSL客戶端證書認證? – Graham