Ранее в статье о бесплатном ssl сертификате для сайта мы уже познакомили вас с основной концепцией сертификатов безопасности ssl, letsencrypt и способом их получения на примере панелей isp manager 5 и VESTA. В этой мы рассмотрим установку Let’s Encrypt на сервере на устаревшей, но по прежнему достаточно широко используемой панелью ISPmanager 4 и без наличия панели управления в прицнипе.
Внимание! Нижеследующий материал предполагает у вас наличия навыков работы с linux, его консольными текстовыми редакторами и понимания общей концепции взаимодействия с веб-сервером. В статье будут рассмотрены только ключевые шаги, без разъяснения тонкостей. Если вы не уверены в своих действиях — обратитесь за помощью к профильному специалисту.
Установка Let’s Encrypt на сервере
Первым делом, вне зависимости от дальнейшего варианта использования, нам нужно установить letsecrypt. Для этого подключаемся по ssh на целевой сервер используя имеющиеся у вас (root) доступы. Затем необходимо установить пакеты git и wget.
Для дистрибутивов на базе Debian/Ubuntu воспользуйтесь командой:
apt-get install git wget
Для дистрибутивов на базе CentOS:
yum install git wget
По окончании установки переходим в каталог /opt, это наиболее безопасное место для сборки нестандартных пакетов и его окружения:
cd /opt/
Далее запускаем команду:
git clone https://github.com/certbot/certbot.git
С её помощью мы копируем необходимые для получения скрипты в каталог /opt/certbot
Переходим в него:
cd /opt/certbot
Внимание! В случае использования старой версии ОС на основе Debian7/Ubuntu 14.04 работа с актуальной версией letsecnrypt невозможна! Выходом из ситуации будет установка более старой версии, которая на момент публикации статьи функциональна в полной мере. Для этого вместо git clone https://github.com/certbot/certbot.git вам нужно последовательно запустить:
mkdir -p /opt/certbot cd /opt/certbot wget https://raw.githubusercontent.com/certbot/certbot/75499277be6699fd5a9b884837546391950a3ec9/certbot-auto chmod +x ./certbot-auto
Так мы создадим целевой каталог, загрузим в него старую версию letsecnrypt, установим права на его запуск.
Получение сертификата Let’s Encrypt на сервере
Предполагается, что у вас на сервере уже есть установленный веб-сервер nginx, который отвечает за обработку входящих подключений, включая ssl на стандартном 443 порту, а нужный домен уже направлен на сервер и отдается с него.
Останавливаем nginx:
service nginx stop
Это нужно для того, чтобы скрипт letsecnrypt смог подключится на порт, который по умолчанию резервирует веб-сервер.
Запускаем процесс получения сертификата при помощи команды:
./certbot-auto certonly --standalone -d имя_домена -d www.имя_домена
В случае если вам домен использует больше число алиасов — их нужно нужно перечислить в запускаемой команде в виде -d имя_алиаса. Если сам домен или его алиасы кириллические — их нужно добавлять в виде пуникода (pynycode). Для этого вы можете воспользоваться любым доступным конвертором, например: https://www.punycoder.com/
Внимание! В случае использования старой версии ОС на основе Debian7/Ubuntu 14.04 запускаемая команда на получение сертификата будет иметь несколько иной вид:
./certbot-auto --no-self-upgrade certonly --standalone -d имя_домена -d www.имя_домена
Ключ —no-self-upgrade — необходимое условие, для того чтобы letsecnrypt не обновился до неподдерживаемой у вас версии.
При первом запуске letsecnrypt скачает и установит базовые пакеты для формирования необходимого ему окружения. Установка будет производится через стандартный пакетный менеджер вашей ОС, в процессе вам нужно будет только подтвердить её.
Затем последует ряд вопросов на которые вам нужно дать ответ:
1. Актуальная почта.
2. Правила использования.
3. Разрешение о предоставлении информации о вашей почте партнерам, некоммерческая, информационная рассылка.
В случае использования для домена cloudflare или другого сервиса скрывающего реальный ip на котором размещен домен или же вы используете многосерверную конфигурацию, при которой обработка входящих подключений происходит на одном сервере, а файлы физически расположены на другом — команда на получение сертификата будет другая:
./certbot-auto certonly --manual --preferred-challenges dns -d имя_домена -d www.имя_домена
Внимание! В случае использования старой версии ОС на основе Debian7/Ubuntu 14.04 запускаемая команда на получение сертификата будет иметь несколько иной вид:
./certbot-auto certonly --no-self-upgrade --manual --preferred-challenges dns -d имя_домена -d www.имя_домена
Ключ —no-self-upgrade — необходимое условие, для того чтобы letsecnrypt не обновился до неподдерживаемой у вас версии.
Последует ряд вопросов на которые вам нужно дать ответ:
1. Разрешение занесения ip сервера с которого будет получен сертификат в лог.
2. Со стороны используемых доменов НС серверов необходимо создать TXT записи с указанными скриптом данными. После внесения данных к одному — нужно выждать одну две минуты для обновления, затем нажать Enter как и сказано в скрипте, после чего последует следующий запрос для каждого из алисов, что указаны при генерации сертификата.
На примере cloudflare внесенные записи выглядят следующим образом:
При правильном выполнении всех шагов последует получение сертификата:
В выводе вы получите путь к актуальным данным сертификата. Обычно они имеют вид:
/etc/letsencrypt/live/имя_домена/fullchain.pem /etc/letsencrypt/live/имя_домена/privkey.pem
Подключение сертификата Let’s Encrypt
В случае если у вас сервер без панели, вам нужно отредактировать конфигурационный файл nginx в котором у вас содержится описание виртуалхоста целевого домена. В зависимости от сервера и его настроек путь может отличаться, но в основном это /etc/nginx/nginx.conf и /etc/nginx/conf.d/имя_домена.conf. Ищите блок server_name в котором значится имя вашего домена для которого был получен сертификат, после блока listen ip_вашего_сервера добавьте строки:
listen ip_вашего_сервера:443 ssl; ssl_certificate /etc/letsencrypt/live/имя_домена/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/имя_домена/privkey.pem;
Сохраняем изменения, проверяем корректность конфигурации nginx:
nginx -t
Запускаем ранее остановленный nginx:
service nginx start
При использовании isp manager 4 методика будет отличаться т.к. необходимо присутствие подключенного сертификата в самой панели, чтобы избежать возможных конфликтов со стороны используемой ПУ. Для этого авторизируемся в панель с имеющимися (root) доступами:
В разделе “Учетные записи” переходим в “Пользователи”, затем выбираем нужного нам (от лица которого добавлен целевой домен), нажимаем “Изменить”, переходим в “Права” и устанавливаем галочку “SSL”, подтверждаем внесение изменений нажатием кнопки “Оk”.
Далее в разделе “Домены” находим “WWW домены” и переходим в него, находим в списке домен для которого мы создавали сертификат, нажимаем “Изменить”, устанавливаем галочку на “SSL”, “SSL порт” оставляем по умолчанию (443) в поле “SSL сертификат” выбираем “создать новый самоподписанный”, подтверждаем подтверждаем внесение изменений нажатием кнопки “Оk”.
Теперь самое важное — в консоли переходим в директорию в которой панель isp manager 4 хранит данные сертификатов:
cd /var/www/httpd-cert/имя_пользователя
Убеждаемся, что она содержит нужные нам данные:
ls
В выводе вы получите список файлов, нас интересуют два:
имя_домена.crt и имя_домена.key
Удаляем их:
rm имя_домена.crt имя_домена.key На их месте создаем симлинки, ведущие в ту директорию, где находятся полученные сертификаты letsecnrypt: ln -s /etc/letsencrypt/live/имя_домена/fullchain.pem имя_домена.crt ln -s /etc/letsencrypt/live/имя_домена/privkey.pem имя_домена.key
Проверяем корректность конфигурации nginx:
nginx -t
Перезапускаем nginx:
service nginx start
На этом подключение сертификатов завершено. Корректность подключения сертификата можете проверить при помощи любого доступного сервиса проверки, например: https://www.sslshopper.com/ssl-checker.html
Срок действия сертификата 90 дней, для автоматического его обновления нужно добавить соответствующее задание в cron. Перед этим проверим задана ли переменная PATH. Это необходимо для того, чтобы запускаемый скрипт мог корректно распознать наличие веб-сервера nginx для последующего перезапуска (особенно актуально для CentOS). Запускаем:
crontab -l | grep PATH
Если вывод пустой и “PATH” отсутствует — добавляем его (в CentOS даже если есть — убедитесь, что в нем присутствует /usr/sbin ). Для этого сначала получим нужное значение для текущего пользователя при помощи:
echo $PATH
Открываем cron на редактирование:
EDITOR=nano crontab -e
или
crontab -e
Добавляем сверху:
PATH=”полученное_значение_из_ранее_введенной_команды_в_кавычках”
После чего ниже уже задание на обновление сертификата:
01 01 */7 * * /opt/certbot/certbot-auto renew --nginx
Что эквивалентно запуску обновления в 01 минут 01 часа раз в 7 дней каждый месяц.
Внимание! В случае использования старой версии ОС на основе Debian7/Ubuntu 14.04 задание будет несколько отличаться:
01 01 */7 * * /opt/certbot/certbot-auto --no-self-upgrade renew --nginx
Ключ —no-self-upgrade — необходимое условие, для того чтобы letsecnrypt не обновился до неподдерживаемой у вас версии.