Со стороны клиента: (флаттер)
Я пытаюсь использовать 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
Вопросы:
Что-нибудь, что я пропустил для настройки TLS на iOS?
Со стороны клиента, есть ли способы сбора данных ответов сервера для дальнейшего изучения?
Как со стороны Ejabberd на стороне сервера, как выяснить, что ответные данные отправляют обратно клиенту?
CA является самоподписанным , это вызывает какие-либо проблемы? Я подписался на эту страницу: http://www.steves-internet-guide.com/mosquitto-tls/