MQTT между Flutter и Ejabberd: Исключение TLS Handshake на iOS не Android при использовании SecureSocket - PullRequest
0 голосов
/ 15 апреля 2020

Со стороны клиента: (флаттер)

Я пытаюсь использовать SecureSocket для подключения Ejabberd MQTT на AWS сервере:

int port = 8883;

SecurityContext context = SecurityContext.defaultContext;
final ByteData crtData = await rootBundle.load('assets/ca.crt');

context.setTrustedCertificatesBytes(crtData.buffer.asUint8List());
SecureSocket.connect(broker, port, context: context)
                .then((socket)=>{...})
                .catchError((error) => print("Socket Connection failed: ${error}"));

Работает на Симулятор Android, однако он не работает на симуляторе iOS со следующей ошибкой:

flutter: Socket Connection failed: HandshakeException: Handshake error in client 
(OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:354))

Со стороны сервера: (Ejabberd на AWS)

Я получаю следующие журналы в /opt/ejabberd/logs/ejabberd.log, что означает, что они начинают говорить, но нет никаких журналов, указывающих состояние сокетного соединения:

[info] <0.387.0>@ejabberd_listener:accept:256 (<0.12952.0>) 
Accepted connection xxx.xxx.xxx.xxx:12345 -> xxx.xxx.xxx.xxx:8883

Вопросы:

  1. Что-нибудь, что я пропустил для настройки TLS на iOS?

  2. Со стороны клиента, есть ли способы сбора данных ответов сервера для дальнейшего изучения?

  3. Как со стороны Ejabberd на стороне сервера, как выяснить, что ответные данные отправляют обратно клиенту?

  4. CA является самоподписанным , это вызывает какие-либо проблемы? Я подписался на эту страницу: http://www.steves-internet-guide.com/mosquitto-tls/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...