Я пытаюсь настроить сертификат для использования с моим сервером ejabberd. Это не самоподписанный сертификат, а сертификат PossitiveSSL от Comodo, действительный в течение 1 года. Срок действия сертификата не истек.
У меня есть закрытый ключ в формате PEM, сертификат в .crt и цепочка в .ca-bundle
В /opt/ejabberd/conf/ejabberd.yml есть строка, в которой говорится:
certfiles:
- /opt/ejabberd/conf/server.example.com.crt
- /opt/ejabberd/conf/server.example.com.ca-bundle
- /opt/ejabberd/conf/privkey.pem
для Privkey.pem мне пришлось удалить парольную фразу, так как службы ejabberd не запускались. Не удалось прочитать закрытый ключ.
Мой вопрос: должен ли я иметь один файл PEM, в котором я буду указывать Privkey + cert + chain?
Я попробовал оба варианта, и он работает одинаково для клиента Gajim, необходимого для TLS при подключении. В некоторых случаях проще оставить в конфигурации три строки, каждая из которых указывает на соответствующий контейнер.
В любом случае, у меня есть клиент gajim Windows XMPP, который отлично подключается к TLS, необходимому для сервера, и без ошибок, и использует TLS
Когда я пытаюсь подключить другой JID через устройство Android, я получаю следующее:
Принять сертификат Unkonwn? Сертификат сервера не подписан известным сертификатом AUthority.
Зачем мне это? Хотя в Android у меня есть возможность «Всегда принимать», что я не хочу делать в любом случае, поскольку я использую подписанный сертификат от Authority, устройства Apple даже не дают возможности принимать что-либо, и соединение TLS разрывается.
Я пробовал несколько вещей, но у меня все еще появляется это всплывающее окно в Android.
Это запись:
certfiles:
- /opt/ejabberd/conf/server.example.com.crt
- /opt/ejabberd/conf/server.example.com.ca-bundle
- /opt/ejabberd/conf/privkey.pem
Глобальный? Значит, если я укажу здесь файлы сертификатов, мне не нужно указывать для каждого модуля? как и для модуля c2S, нужно ли указывать путь для файла сертификата?
listen:
-
port: 5222
module: ejabberd_c2s
##
## If TLS is compiled in and you installed a SSL
## certificate, specify the full path to the
## file and uncomment these lines:
##
## certfile: "/path/to/ssl.pem"
## starttls: true
Заранее спасибо.
Значит, если я укажу здесь файлы сертификатов, мне не нужно указывать для каждого модуля? как и для модуля c2S, нужно ли указывать путь для файла сертификата?
В документации ясно указано, что параметр certfiles является глобальным, поэтому ejabberd использует его всякий раз, когда ему нужно получить сертификаты в любом из своих модулей:
Глобальные параметры Есть несколько дополнительных глобальных параметров, которые можно указать в файле конфигурации ejabberd (вне прослушивания):
acme: Автоматическое управление сертификатами SSL. См. Раздел ACME.
certfiles: Список путей: опция принимает список путей к файлам (необязательно с подстановочными знаками), содержащих сертификаты PEM или закрытые ключи PEM. При запуске ejabberd сортирует сертификаты, находит совпадающие закрытые ключи и перестраивает полные цепочки сертификатов. Используйте эту опцию при включении таких опций, как starttls или tls, в слушателях ejabberd_c2s, ejabberd_s2s или ejabberd_http.
https://docs.ejabberd.im/admin/configuration/#global-options
Кроме того, есть несколько примеров конфигураций, которые используют глобальную опцию certfiles для определения сертификатов, которые позже будут использоваться конкретными модулями:
https://docs.ejabberd.im/admin/configuration/#mod-register-web
https://docs.ejabberd.im/admin/configuration/#mod-http-upload
Спасибо за информацию и ссылки. Я их просмотрел и все настроено как надо. Снова клиент gajim в Windows 10 ни на что не жалуется, и его JID надежно подключается к серверу. Устройства Android и Apple жалуются на «Сертификат сервера не подписан известным центром сертификации». Все клиенты находятся в одной внутренней локальной сети.
Не уверен, что еще попробовать,