LINUX.ORG.RU
ФорумAdmin

Нужен ли сертификат для локального Jabber

 ,


1

3

Продолжаю мучать вопрос о совместимости Jabber-конференций с картинками и HTTP upload. На сей раз не в интернете, а на личном сервере в локалке.
Сервер: ejabberd 20.04 (Debian Bullseye). HTTP upload настроен, каталог для сохранения изображений в конфиге задан.
Клиент: gajim 1.2.1.
Кнопка прикрепления файлов доступна, при её нажатии открывается окно выбор файла, я выбираю картинку (специально взял маленькую, лого дебиана из /usr/share/pixmaps), жму Open… и ничего не происходит. Запустив gajim под терминалом, вижу после нажатия Open собщение об ошибке:

xx.xx.2020 xx:xx:xx (W) gajim.c.m.httpupload  (jabber.my) TLS verification failed: The certificate does not match the expected identity of the site

Вообще, немножко странно, что в пользовательской программе это выводится в консоль, а не в message box какой-нибудь. Попробую написать по этому поводу разработчикам gajim. Но это вопрос отдельный, а сейчас думаю, как исправить саму ошибку.
В ejabberd.yml прописана ссылка на некий умолчальный /etc/ejabberd/ejabberd.pem, который, как я понимаю, в текущей ситуации не подходит.

certfiles:
  - "/etc/ejabberd/ejabberd.pem"

Если это имеет значение — имя хоста (jabber.my) прописано в hostname, с DNS я ещё не связывался (клиент и сервер пока на одном хосте).

Вопрос 1. Нужно ли вообще в локальной сети (она совсем локальная, выхода в интернет нет) делать сертификат для Jabber, или есть способ это обойти?
Вопрос 2. Если сертификат всё же нужен, как его правильно приготовить? Я видел вроде бы толковые доки по приготовлению pem именно для ejabberd, но они для интернета: создаём запрос, передаём в удостоверяющий центр, получаем ответ, «клеим» файл pem. А в локалке что делать? (А, ещё только что заметил, что те доки для SSL, не для TLS, не знаю, насколько велика разница.)

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)

Вопрос 1. Нужно ли вообще в локальной сети (она совсем локальная, выхода в интернет нет) делать сертификат для Jabber, или есть способ это обойти?

Если у тебя там совсем некому перехватывать трафик, то(по крайней мере раньше) можно было не использовать starttls и сертификат соответственно. Это что касается порта 5222. Как насчет http upload в ejabberd - не в курсе. В prosody например указать для http_upload модуля запрет на SSL нельзя, что намекает.

Если сертификат всё же нужен, как его правильно приготовить?

Тебе нужен самоподписанный сертификат на локальный домен твоего jabber-сервера. Можно выписать через openssl, в гугле полно инструкций. Если боишься консоли - есть xca. Потом этот сертификат(точнее CA этого сертификата, что в случае самоподписанного сертификата есть одно и то же) ты должен добавить в хранилище сертификатов на КАЖДОГО клиента.

А, ещё только что заметил, что те доки для SSL, не для TLS, не знаю, насколько велика разница

Разницы в плане выписывания сертификатов(если ты собрался выписывать не утилитами лохматой древности) нет. Ключи в консоли openssl по крайней мере не поменялись.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 4)

использовать самоподписанный

/thread

Harald ★★★★★
()
Ответ на: комментарий от Pinkbyte

Потом этот сертификат(точнее CA этого сертификата, что в случае самоподписанного сертификата есть одно и то же) ты должен добавить в хранилище сертификатов на КАЖДОГО клиента.

Вот это не распарсил. Сертификаты должны и на клиентских машинах храниться?

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

конечно

для публичных удостоверяющих центров они уже есть на клиенте, в составе ОС/браузера/специального пакета с сертификатами

Harald ★★★★★
()
Ответ на: комментарий от hobbit

Схема доверия на клиентской машине работает следующим образом: клиент доверяет тем сертификатам, которые выписанны удостоверяющими центрами, CA-сертификаты которых есть в хранилище сертификатов на клиенте. Это может быть системное хранилище или хранилище браузера(для тех браузеров, кто реализует свои хранилища - например Firefox. Chrome и IE/Edge/Safari используют системное хранилище).

Чтобы сертификату твоего сервера клиент доверял необходимы две вещи:
1) сертификат CA, которым подписан сертификат сервера, был в хранилище сертификатов клиента;
2) совпадения CN в сертификате сервера(mycoolserver.domain.local) с DNS-именем, по которому подключается клиент(есть еще altName, когда сертификат выписан на несколько доменных имен, но давай пока этим голову забивать не будем);

Для сертификатов, выписанных публичными удостоверяющими центрами первая вещь решается автоматически - потому что их CA-сертификаты уже есть на клиентских устройствах.

Как ты понимаешь, в случае самостоятельно сгенерированного самоподписанного сертификата, он доверенным считаться на клиенте не будет. Подписан он собой(что следует из слова «самоподписанный»), поэтому именно сам сертификат и нужно добавить в доверенные.

Есть еще один вариант(если это позволяет клиентская программа): можно проигнорировать недоверенный и заставить конкретную программу «доверять» этому сертификату путем добавления его локально в исключения. Данная методика реализуется по-разному в каждой конкретной программе, но если ты говоришь что gajim не выдает ничего пользователю(а только пишет в консоль), сдается мне что для http upload подобного механизма в gajim не завезли(а вот «доверять» невалидному сертификату при подключении к самому jabber-серверу там можно)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 5)
Ответ на: комментарий от Pinkbyte

Сделал и установил самоподписанный сертификат. Ругани на сертификат в терминале больше нет, зато выводится ошибка Internal Server Error. Причём она уже выводится не по-тихому в терминал, а в message box. И я вот в затруднении: это всё ещё сертификатопроблема или уже другая?

Тут в соседней теме @ma1uta объяснял, что XEP-0363 переделывали, часть софта поддерживает старую версию, часть новую. Может, ошибка из-за этого (тогда как бы понять, где старая, а где новая…)

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

https://dev.gajim.org/gajim/gajim/-/wikis/help/gajimfaq#is-gajim-able-to-print-the-xmpp-protocol-xml-stream-it-sends-and-receives попробуй включить xml консоль, отправить картинку и посмотри, что в консоли будет. В идеале с самого логина записывать лог, чтобы увидеть, где расположен upload-сервер (https://xmpp.org/extensions/xep-0363.html#disco), ну и саму загрузку файла.

ma1uta ★★★
()
Ответ на: комментарий от ma1uta

попробуй включить xml консоль, отправить картинку и посмотри, что в консоли будет

Ну получилось вот что-то такое. Что-то ничего криминального не вижу, может, смотрю плохо?

Отправил маленький файл, лого Дебиана.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

По логу:

https://xmpp.org/extensions/xep-0363.html#request

  1. клиент запрашивает слот, это в логах есть:
<iq xmlns="jabber:client" to="upload.jabber.dh" type="get" id="11c59331-ca8c-4f8d-8d4d-fe4e98428d20">
  <request xmlns="urn:xmpp:http:upload:0" filename="debian-logo.png" size="1718" content-type="image/png" />
</iq>
  1. сервер должен ответить с данными по слоту (логин-пароль, ссылка для загрузки и просмотра).

Этого уже в логах нет. Надо покопать на сервере, почему он не вернул слот для загрузки.

ma1uta ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.