Использование aws ios iot sdk для нашего собственного mqtt-сервера в ios

Мы использовали AWS iOS IoT SDK с конфигурацией ssl. Мы подписались на https://github.com/awslabs/aws-sdk-ios-samples/tree/master/IoT-Sample/Swift в качестве справочного материала. Здесь конечная точка нашего сервера будет иметь формат

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

Мы импортировали файл pkcs12 в связке и смогли подключиться, опубликовать, подписаться на сервер.

Позже мы подумали о том, чтобы иметь для этого локальную сеть в нашей организации. Мы настроили rabbitmq для брокера MQTT для сервера https://www.rabbitmq.com/ssl.html#keys-and-certs. В настоящее время мы пытаемся использовать экземпляр ec2, последний установит локальный сервер. И конечная точка

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

Теперь я не могу подключиться к серверу rabbitmq с помощью aws iot ios sdk.

Но если я использую образец https://github.com/emqtt/CocoaMQTT, я могу подключитесь к конечной точке сервера aws iot и конечной точке сервера rabbitmq.

Что мне теперь делать, чтобы подключиться к конечной точке сервера rabbitmq с помощью aws iot ios sdk https://github.com/aws/aws-sdk-ios/tree/master/AWSIoT. Какие правки мне следует внести в SDK?

Ниже приведены журналы попыток подключения к серверу rabbitmq с помощью 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

person Sanyasirao Mopada    schedule 27.07.2017    source источник


Ответы (1)


Какова ваша цель? Вы хотите, чтобы местный брокер MQTT проводил тестирование, или вы хотите запустить собственный брокер MQTT и использовать AWS iOS IoT SDK для подключения к нему?

Если вы хотите управлять своими собственными брокерами, я бы посоветовал вам хорошенько подумать об этом, поскольку это становится трудным при масштабировании. Я не пробовал использовать SDK AWS IoT против локального брокера, но ваш журнал показывает, что квитирование SSL не удалось. Я собираюсь предположить, что это связано с тем, что взаимная аутентификация между вашим приложением и RabbitMQ не удалась из-за несоответствия сертификата сервера.

AWS IoT использует взаимную аутентификацию, а не только аутентификацию клиента для установления доверия: http://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html

Вам нужно будет сделать две вещи: 1) Определить в iOS SDK, где установлен ЦС сервера AWS IoT (https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem) и замените его на CA для вашего брокера RabbitMQ, 2) Настройте RabbitMQ для взаимной аутентификации (если поддерживается).

Удачи.

person Graham    schedule 29.07.2017
comment
Спасибо за ответ. Да, я хочу запустить собственный брокер MQTT и использовать AWS iOS IoT SDK для подключения к нему? Мне удалось подключиться к нашему собственному брокеру MQTT и серверу AWS IOT с помощью сторонней библиотеки CocoaMQTT. Но невозможно подключиться к нашему собственному брокеру MQTT с помощью AWS IOS IoT SDK. Это означает, что, отредактировав или настроив что-то в AWS IOT IOS SDK, я смогу подключиться к нашему собственному брокеру MQTT, а также я смогу подключиться к обоим с помощью CocoaMQTT. Я просто хочу знать, что мне для этого нужно изменить? - person Sanyasirao Mopada; 29.07.2017
comment
Я не разработчик iOS, но если вы посмотрите здесь внутреннее устройство SDK, github.com/aws/aws-sdk-ios/blob/master/AWSIoT/Internal/MQTTSDK/ вы можете увидеть, где настроен сеанс MQTT, а SSL может быть включенным и выключенным. Если отключить SSL, то соединение будет работать? Если вы не собираетесь использовать сервис AWS IoT, я бы рекомендовал использовать другой клиент MQTT. - person Graham; 29.07.2017
comment
Глядя на документы подключаемого модуля RabbitMQ MQTT rabbitmq.com/mqtt.html, похоже, что RabbitMQ использует имя пользователя / пароль по умолчанию для аутентификации. Вы включили аутентификацию с помощью клиентских сертификатов SSL? - person Graham; 29.07.2017
comment
Да, я включил аутентификацию клиента SSL, но она не работает - person Sanyasirao Mopada; 31.07.2017
comment
а имя пользователя хранится в сертификатах Distinguished Name? - person Graham; 31.07.2017
comment
Не понял, даю файл p12 и пытаюсь подключиться и не могу подключиться - person Sanyasirao Mopada; 31.07.2017
comment
В документации плагина RabbitMQ MQTT указано, что имя пользователя, используемое для аутентификации, должно храниться в клиентских сертификатах Distinguished Name. - person Graham; 31.07.2017
comment
Да, имя пользователя хранится в сертификате Distinguished Name. Я могу подключиться к серверу с помощью библиотеки github.com/emqtt/CocoaMQTT, но не с помощью AWS iOS IoT SDK - person Sanyasirao Mopada; 31.07.2017
comment
Похоже, что AWS IoT SDK представляет неправильный сертификат CA. - person Graham; 31.07.2017
comment
Возможно, грустно, что в последнее время они реагируют на проблемы в GitHub - person Sanyasirao Mopada; 01.08.2017