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

Сертификат CA отображается как неизвестный сертификат

Я пытаюсь настроить сертификат для использования с моим сервером 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 жалуются на «Сертификат сервера не подписан известным центром сертификации». Все клиенты находятся в одной внутренней локальной сети.

Не уверен, что еще попробовать,