Проблемы с Let’s Encrypt в ISPManager

Возникла задача поставить SSL сертификат на клиентский сайт, при этом требований к «крутости» SSL нет, т.к сайт будет использоваться для внутренних нужд компании. Решили взять бесплатный сертификат от Let’s Encrypt.

На хостинге стоит довольно популярная в России панель управления ISPManager, в которой уже есть модуль интеграции с Let’s Encrypt, и проблем с задачей не должно было возникнуть.

Но встроенный в ISPManager модуль Let’s Encrypt, конечно, не заработал — бесконечно висел статус «Процесс получения сертификата начат», и все. По щелчку на кнопке «Let’s Encrypt Журнал» только эта запись, в настройках  модуля информация о Let’s Encrypt и ничего больше:

Попробовал создать сертификат с пунктом «Проверка через DNS» — тот же результат. И гугл и яндекс по запросам «Зависает выдача сертификата Let’s Encrypt», «ispmanager let’s encrypt проблемы», «ispmanager не ставится let’s encrypt сертификат», «SSL Let’s Encrypt в ISP manager не получает сертификат » и т.п., дают один совет — повысить в настройках панели  для модулей rpc,  sslcert и core_module уровень логирования до «9 — отладочная информация» и смотреть, что пишется в /usr/local/mgr5/var/ispmgr.log в момент выдачи сертификата.

Долго курил лог в момент выдачи:

Далее постоянно идут запросы функции sslcert, строки вида:

Может быть Вам логи скажут больше чем мне, я же вменяемого описания ошибок в них не увидел, и решил поставить сертификат стандартной утилитой Certbot.

Какое то время ушло на понимание его работы — в сети и на хабре довольно много мануалов по установке Let’s Encrypt с помощью Certbot, и каждый чем то отличается. При этом из-за настроек домена сделанных ISPManager, сразу установить сертификат не получилось.

В итоге решил задачу следующим образом:

  1. выключил ssl для домена
  2. удалил все старые сертификаты домена
  3. далее по инструкции из статьи https://habrahabr.ru/post/279695/
    1. создал конфиг файл в /etc/nginx/template/letsencrypt.conf
    2. подключил конфиг в нужный домен
    3. закомментировал строки в файле /etc/nginx/vhosts-includes/letsencrypt.conf (о нем ниже)
    4. выполнил команду
  4. включил ssl для домена, выбрав самоподписанный сертификат, указав параметр «Перенаправлять HTTP-запросы в HTTPS» (в nginx конфиг для 80го порта добавляется строчка return 301 https://$host:443$request_uri; )
  5. прописал в конфиге nginx’а путь к новому сертификату, закомментировав все лишние строки для самоподписанного сертификата.
    Конфиг апача трогать не пришлось, т.к. он висит на бекэнде, а на фронте nginx
  6. Перезапускаем nginx — systemctl restart nginx
  7. сделал бекап рабочего конфига в той же директории, т.к. если через панель управления «Изменить» параметры домена, ему подставится самоподписанный сертификат
  8. осталось записать конфиг в SQLite базу ISPManager’а, чтобы после сохранения параметров домена по кнопке «Изменить» ничего не слетало.

Таким образом было сделано то, что стандартный модуль интеграции Let’s Encrypt в ISPManager’е должен был сделать автоматически, но не сделал.

P.S.
ISPManager’ом должна была создаться папка в /usr/local/mgr5/www/letsencrypt, которая по какой то причине не создавалась, при этом в файле /etc/nginx/vhosts-includes/letsencrypt.conf был такой конфиг:

Т.е.  в /usr/local/mgr5/www/letsencrypt/ сохраняются ключи, переданные сервером Let’s Encrypt, а по url  /.well-known/acme-challenge/*ключ*  letsencrypt.org убеждается, что мы являемся владельцем домена.
Данный конфиг закомментировал, чтобы не возникло конфликта с файлом, созданным на шаге 3.1.

P.P.S
Справку по Certbot можно получить по certbot —help или certbot —help all  — они описывают параметры команды шага 3.4.
Например:
—standalone Run a standalone webserver for authentication
—nginx Use the Nginx plugin for authentication & installation
—webroot Place files in a server’s webroot folder for authentication
—manual Obtain certificates interactively, or using shell script

 

Вам может также понравиться...