Назад | Перейти на главную страницу

Matrix Synapse, стоящий за обратным прокси-сервером, порождает ошибку «Отпечаток пальца»

Я хочу настроить экземпляр Синапс за nginx для обратного проксирования. Поскольку nginx настроен с использованием TLS для HTTPS, этот несколько устаревший пост в блоге рекомендует настроить матричный синапс с материалом TLS, уже используемым в vhost nginx, поскольку это материал TLS, который будут видеть другие серверы при разговоре с моим экземпляром.

Пока мне удалось настроить сервер так, чтобы он работал сам по себе, и пользователи на этом экземпляре могли разговаривать друг с другом. Основная проблема - это связь между серверами и двумя серверами, или, как называют это ребята из матрицы, «федерация».

Это моя настройка TLS в матричном синапсе:

tls_certificate_path: "/var/lib/acme/live/matrix.simonszu.de/fullchain"

# PEM encoded private key for TLS
tls_private_key_path: "/etc/matrix-synapse/homeserver.tls.key"

# PEM dh parameters for ephemeral keys
tls_dh_params_path: "/etc/ssl/dhparams/matrix.simonszu.de_dhparams.pem"

# Don't bind to the https port
no_tls: True

В сообщении выше говорится, что вы можете полностью прокомментировать tls_private_key_path, поскольку вы установили no_tlsв True (поскольку каждый материал TLS управляется экземпляром nginx). Я заметил, что на самом деле это не работает, потому что в этом случае matrix-synapse будет искать ключевой файл в непонятных местах. Я не могу связать связанный файл ключа с сертификатом, потому что управление ключами выполняется acmetool для получения сертификатов от Let's Encrypt, и процесс автоматического обновления завершается неудачно, если для файла ключа установлено любое другое разрешение файла, кроме 0600. Но поскольку материал TLS в любом случае управляется nginx, синапсу этот сертификат нужен только для представления отпечатка пальца для других экземпляров синапса, и он фактически игнорирует key_path.

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

У меня есть доступ к другому хосту с его собственным экземпляром синапса (который не находится за обратным прокси-сервером), и я могу просматривать его файлы журнала во время процесса установления связи. В его лог-файле появляются следующие ошибки: SynapseError: 401: No key for matrix.simonszu.de with id ['ed25519:a_LiWb'].

Дальнейшие поиски в Google привели меня к инструменту под названием matrixtool, который можно установить через cpan App::MatrixTool чтобы я мог проверить связь с федерацией через командную строку. Результатом был также намек, который привел меня к мысли, что с моей настройкой TLS все еще что-то не так:

$ matrixtool server-key matrix.simonszu.de
[INFO] Connected to 5.189.143.28:443
[FAIL] TLS fingerprint does not match any listed
[OK] Verified using origin=matrix.simonszu.de key_id=ed25519:a_LiWb
v2 keys from matrix.simonszu.de:

Key id ed25519:a_LiWb
  base64::VF2Cxq3wVEe8NIplwnHK+yKIhdBkgBmzqUfT1k0aMgg
[INFO] Matches cached key

Итак, у меня практически заканчиваются идеи. Во время всех исследований я понял, что не только я столкнулся с этой проблемой, но основным решением для других пользователей было отказаться и создать установку матричного синапса без обратного проксирования. Итак, я пошел и написал здесь этот вопрос, чтобы раз и навсегда прояснить ситуацию: как правильно настроить матричный синапс за обратным прокси с поддержкой TLS?

Синапс обратного проксирования Nginx должен выглядеть примерно так:

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name matrix.example.com;

        location /_matrix {
            proxy_pass http://localhost:8008;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

    server {
        listen 8448 ssl default_server;
        listen [::]:8448 ssl default_server;
        server_name example.com;

        location / {
            proxy_pass http://localhost:8008;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.md