MongooseIM SSL-соединение через AWS ELB - PullRequest
0 голосов
/ 16 января 2019

У меня сервер MongooseIM, настроенный с помощью docker-compose в экземпляре EC2 в AWS.

Я намерен предоставить доступ к некоторым мобильным клиентам с SSL через ELB (AWS) через порт 5222 (модуль ejabberd_c2s mongooseim) следующим образом:

     SSL (Secure TCP) -> 5222 -> TCP -> 5222  (EC2 Instance Port)

В конфигурации модуля ejabberd_c2s у меня есть следующее:

    { 5222, ejabberd_c2s, [

                %%
                %% If TLS is compiled in and you installed a SSL
                %% certificate, specify the full path to the
                %% file and uncomment this line:
                %%
                {certfile, "priv/ssl/fake_server.pem"}, starttls,

                %%{zlib, 10000},
                %% https://www.openssl.org/docs/apps/ciphers.html#CIPHER_STRINGS
                %% {ciphers, "DEFAULT:!EXPORT:!LOW:!SSLv2"},
                {access, c2s},
                {shaper, c2s_shaper},
                {max_stanza_size, 65536},
                {protocol_options, ["no_sslv3"]}

               ]},

Но клиенты не могут подключиться, единственное сообщение, которое я получаю на сервере, это:

    mongooseim_server_dev | 10:58:25.885 [info] (#Port<0.27608>) Accepted connection {{10,0,17,246},42571} -> {{172,18,0,2},5222}
    mongooseim_server_dev | 10:58:25.885 [debug] Received XML on stream = "���yw�\��.ndEt�;�����fn�A>� n:�=5��</A
     "ngooseim_server_dev | ��kj98����g@32ED�(#
    mongooseim_server_dev | 10:58:25.885 [debug] Send XML on stream = <<"<?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='2B421BCD2D077161' from='localhost' version='1.0'>">>
    mongooseim_server_dev | 10:58:25.886 [debug] Send XML on stream = <<"<stream:error><xml-not-well-formed xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>">>
    mongooseim_server_dev | 10:58:25.886 [debug] Send XML on stream = <<"</stream:stream>">>

Документация Mongoose не предлагает мне никакого решения, и я не вижу никого с этой ошибкой.

Любая помощь или подсказка?

1 Ответ

0 голосов
/ 16 января 2019

Из вашего описания и фрагмента журнала MongooseIM я считаю, что клиент запускает зашифрованное соединение с самого начала, поэтому «полученный XML» выглядит как мусор.

В XMPP исходное незашифрованное соединение обновляется до безопасного соединения с использованием STARTTLS . Это должно хорошо работать с ELB с переадресацией TCP и без завершения TLS, вы просто должны убедиться, что клиент не пытается использовать SSL / TLS с самого начала, а использует STARTTLS. Все популярные библиотеки XMPP должны иметь эту опцию, она является частью ядра XMPP.


[...] проще установить ELB TCP в TCP и шифровать его по TLS, когда соединение открыто?

Точно.

В основном я использую ELB, чтобы избежать необходимости обрабатывать SSL самостоятельно, и если я не могу его получить, было бы лучше напрямую выставить сервер mongoose в Интернет?

ELB нельзя использовать для завершения SSL для простого XMPP. Доступные опции:

  1. ELB перенаправляет обычный TCP, используется простой прослушиватель XMPP MongooseIM - Клиент открывает TCP-соединение, но обновляет его через STARTTLS, все экземпляры EC2 требуют предоставления сертификата.

  2. ELB настроен для завершения HTTPS, MongooseIM использует прослушиватель BOSH - BOSH является XMPP по HTTP, поэтому имеет некоторые издержки, но преимущество разгрузки SSL / TLS может стоить того, нет головной боли с сертификатами в экземплярах EC2 .

...