В этой статье описывается процесс выпуска и подключения SSL сертификата с помощью утилиты dehydrated для образов с панелью NetAngels. Однако инструкции в данной статье могут быть полезны и при использовании любого другого дистрибутива. Различаться будет только содержание конфигурационного файла веб-сервера, которое зависит от установленного на сервере ПО.
Наша автоматика позволяет подключить SSL сертификат в панели управления только для доменов, которые делегированы на наши NS-серверы ns1.netangels.ru, ns2.netangels.ru, ns3.netangels.ru, ns4.netangels.ru
Однако услуга VDS предполагает предоставление полного доступа ко всем настройкам сервера. Поэтому подключение сертификата для доменов, которые делегированы на сторонние серверы, является решаемой задачей.
В первую очередь хотим обратить внимание на тот факт, что в образе с панелью NetAngels конфигурационные файлы веб-серверов в каталогах /etc/nginx/sites-enabled и /etc/apache2/sites-enabled создаются и редактируются автоматикой при создании сайтов или изменении их настроек. Поэтому редактировать эти файлы вручную не рекомендуется.
Чтобы решить этот вопрос, мы создали дополнительные конфигурационные файлы в каталоге /etc/nginx/custom-settings.d , которые можно использовать для тонкой настройки сайтов.
В этой статье мы расскажем, как с помощью дополнительного конфигурационного файла веб-сервера Nginx можно подключить SSL сертификат.
1. Для начала подключитесь к серверу по протоколу SSH как пользователь root;
2. Для выпуска сертификата предлагаем использовать утилиту dehydrated. Установить её можно так:
apt-get update
apt-get install dehydrated
3. Теперь необходимо создать файл со списком доменов для вашего сертификата:
nano /etc/dehydrated/domains.txt
В нём напишите список доменов. Для каждого отдельного сертификата список доменов пишется в одной отдельной строке:
example.ru www.example.ru
Для сохранения нажмите Ctrl+O и для выхода Ctrl+X
Обратим внимание, что wildcard-сертификат вида *.example.ru подобным образом не выпустить. Для таких сертификатов подходит только валидация по DNS. Однако в одном сертификате на текущий момент можно использовать до 100 доменных имён.
4. Далее нужно проверить, что домены указывают на ваш сервер. Это обязательное условие для выпуска SSL сертификата. Для проверки можно использовать утилиту host
host example.ru
и
host www.example.ru
Если в ответ на эти команды вы получаете ip-адрес вашего сервера, то всё в порядке и можно продолжать. Если же ip-адрес другой или его нет вовсе, то следует либо проверить корректность А-записей, либо дождаться их вступления в силу.
5. Отредактируем конфигурационный файл веб-сервера для корректной отдачи файлов валидации домена:
nano /etc/nginx/custom-settings.d/example.ru.conf
Вставляем в него блок location
location /.well-known/acme-challenge {
alias /var/lib/dehydrated/acme-challenges/;
}
Для сохранения нажмите Ctrl+O и для выхода Ctrl+X
Проверим корректность настроек веб-сервера:
nginx -t
Если всё в порядке, то применяем изменения
nginx -s reload
6. Зарегистрируйте учётную запись Let’s Enrypt командой:
dehydrated --register --accept-terms
И выпустите сертификат:
dehydrated -c
В случае успешного выпуска файлы сертификата и приватного ключа появятся в каталоге /var/lib/dehydrated/certs/example.ru
7. Для расширения количества поддерживаемых протоколов шифрования сгенерируйте файл dhparam:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
Процесс может занять несколько минут. Необходимо дождаться его завершения
8. Вновь отредактируйте конфигурационный файл Вашего сайта (/etc/nginx/custom-settings.d/example.ru.conf), чтобы он принял такой вид:
listen 443 ssl;
ssl_certificate /var/lib/dehydrated/certs/example.ru/fullchain.pem;
ssl_certificate_key /var/lib/dehydrated/certs/example.ru/privkey.pem;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /.well-known/acme-challenge {
alias /var/lib/dehydrated/acme-challenges/;
}
Здесь на собственное усмотрение можно отключить устаревшие протоколы TLS 1 и 1.1 и подключить TLS 1.3. Это повысит уровень безопасности соединения.
Однако стоит учитывать, что при отсутствии протоколов версии 1 и 1.1 пользователи со старыми операционными системами и устройствами могут потерять возможность зайти на ваш сайт. В то же время для подключения TLS 1.3 необходимо современное ПО уже на вашем сервере. На Debian 9, Ubuntu 18 и ниже этот протокол может не поддерживаться.
9. Проверьте конфигурацию веб-сервера и примените изменения:
nginx -t
nginx -s reload
10. На этом моменте ваш сайт уже доступен по протоколу https. Следует внимательно проверить корректность его работы, и если всё хорошо, то в самое начало конфигурационного файла, который вы ранее редактировали, можно добавить правило редиректа на защищённое соединение:
if ($scheme = http) {
return 301 https://$host$request_uri;
}
и применить изменения:
nginx -t
nginx -s reload
Таким образом на финальном этапе ваш конфигурационный файл в каталоге /etc/nginx/custom-settings.d будет выглядеть примерно так:
if ($scheme = http) {
return 301 https://$host$request_uri;
}
listen 443 ssl;
ssl_certificate /var/lib/dehydrated/certs/example.ru/fullchain.pem;
ssl_certificate_key /var/lib/dehydrated/certs/example.ru/privkey.pem;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /.well-known/acme-challenge {
alias /var/lib/dehydrated/acme-challenges/;
}
11. Добавьте cron-задание для автоматического продления сертификата:
Откройте менеджер cron-заданий командой:
crontab -e
Добавьте в открывшемся текстовом редакторе строку:
0 2 */3 * * /usr/bin/dehydrated -c -g && /usr/sbin/nginx -s reload
Эта команда будет раз в трое суток проверять необходимость обновления сертификата, но обновлять его будет не ранее чем за 30 дней до окончания текущего.
Crontab может открыться в непривычном текстовом редакторе vim. В этом случае клавиша INSERT используется для начала ввода текста, клавиша ESC для завершения операций ввода текста и :wq (с двоеточием) для сохранения и выхода.
После сохранения изменений и выхода из crontab проверьте, что задание корректно добавилось. Это можно сделать командой просмотра cron-заданий:
crontab -l
С этого момента выпуском и обновлением сертификата на вашем сервере полностью будет заниматься автоматика. При необходимости добавления нового сертификата будет достаточно в файл /etc/dehydrated/domains.txt в новой строке написать новые доменные имена, выполнить команду:
dehydrated -c
и создать новый конфигурационный файл веб-сервера в каталоге /etc/nginx/custom-settings.d