- Настройка SSL в Nginx с Lets Encrypt
- Настройка SSL в Nginx с Lets Encrypt
- Шаг 1. Настройка виртуального хоста
- 2. Установка Certbot
- 3. Получение сертификата
- 4. Настройка виртуального хоста для SSL
- 5. Дополнительная безопасность
- 6. Проверка
- 7. Обновление сертификата
- Выводы
- Как настроить SSL-сертификат на Nginx
- Настройка SSL в Nginx с Let’s Encrypt
- Шаг 1: Настройка виртуального хоста
- Шаг 2: Установка Certbot
- Шаг 3: Получение сертификата
- Шаг 4: Настройка виртуального хоста для SSL
- Шаг 5: Дополнительная безопасность
- Обновление сертификата
Настройка SSL в Nginx с Lets Encrypt
Nginx — один из самых популярных веб-серверов, благодаря его высокой производительности при больших нагрузках. В наше время всё больше и больше сайтов поддерживают HTTPS и производители браузеров, такие как Google и Mozilla всеми силами пытаются мотивировать владельцев сайтов переходить на этот защищённый протокол.
В последнее время сделать это не очень сложно, потому что все популярные веб-серверы его поддерживают, а получить сертификат можно абсолютно бесплатно. В сегодняшней статье мы поговорим о том как настроить SSL в Nginx с сертификатом Lets Encrypt.
Настройка SSL в Nginx с Lets Encrypt
Я предполагаю, что у вас уже установлен веб-сервер Nginx. Дальше мы рассмотрим как создать виртуальный хост, установить все необходимые компоненты для получения сертификатов, а также настроить само SSL соединение.
Обратите внимание, что для получения сертификата необходимо чтобы к серверу был привязан домен, потому что сертификат будет выдан именно для этого домена и только так центр сертификации сможет убедится, что этот домен и сервер ваши. В этом примере я буду получать сертификат для домена vps.losst.pro и www.vps.losst.pro. Соответственно А запись обоих доменов должна указывать на сервер.
Шаг 1. Настройка виртуального хоста
Если у вас ещё не настроен HTTP виртуальный хост для сайта, то это надо сделать потому что иначе установить SSL сертификат Nginx не получится. Например, для vps.losst.pro самая простая конфигурация будет выглядеть вот так:
sudo vi /etc/nginx/conf.d/vps-losst-ru.conf
server listen 80;
server_name vps.losst.pro www.vps.losst.pro;
access_log /var/log/nginx/vps-losst-ru.access.log main;
root /var/www/vps.losst.pro/public_html/;
index index.html index.htm;
location / try_files $uri $uri/ =404;
>
>
Затем проверьте конфигурацию Nginx:
И если всё верно, перезапустите веб-сервер:
sudo systemctl restart nginx
Директория /var/www/vps.losst.pro/public_html/ должна существовать, и в ней надо расположить индексный файл с каким нибудь содержимым:
sudo mkdir -p /var/www/vps.losst.pro/public_html/
sudo vi /var/www/vps.losst.pro/public_html/index.html
Убедиться что всё работает можно с помощью браузера или утилиты curl:
2. Установка Certbot
Для получения сертификатов LetsEncrypt официально рекомендовано использовать клиент Certbot. Установить программу можно из официальных репозиториев:
sudo apt install certbot certbot-python-nginx
Первый пакет устанавливает саму программу, а второй добавляет модуль для работы с Nginx. После установки можно его использовать.
3. Получение сертификата
Мы не будем устанавливать сертификат автоматически, а только сгенерируем его с помощью этой утилиты, а потом добавим вручную в Nginx. Для генерации и подписи сертификата используйте такую команду:
sudo certbot certonly —nginx -d vps.losst.pro -d www.vps.losst.pro
При первом запуске она попросит вас ввести свой адрес электронной почты, на который будут отправляться уведомления об истечении срока пригодности сертификата, а также новости. Потом вас попросят принять лицензионное соглашение, а потом спросят можно ли передать вашу почту партнёру компании:
Далее сертификат SSL создастся и вы получите такое сообщение:
Здесь программа сообщает о том, что файлы сертификата SSL Nginx сохранены в каталоге /etc/letsencrypt/live/vps.losst.pro/. Теперь настройка SSL Nginx.
4. Настройка виртуального хоста для SSL
В папке /etc/letsencrypt/live/vps.losst.pro/ находятся такие файлы сертификатов:
- cert.pem — файл сертификата, использовать его мы не будем;
- chain.pem — файл цепочки сертификата, тоже не будем использовать;
- privkey.pem — приватный ключ сертификата, надо прописать в параметре ssl_certificate_key;
- fullchain.pem — в нём объединено содержимое cert.pem и chain.pem, надо прописать в параметре ssl_certificate.
Для SSL надо создать отдельный файл виртуального хоста, в котором порт прослушивания будет 443, и будут присутствовать несколько директив настройки SSL:
sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf
server listen 443 ssl;
server_name vps.losst.pro www.vps.losst.pro;
access_log /var/log/nginx/vps-losst-ru.access.log main;
root /var/www/vps.losst.pro/public_html/;
index index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/vps.losst.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vps.losst.pro/privkey.pem;
location / try_files $uri $uri/ =404;
>
>
После создания файла останется перезапустить Nginx:
sudo systemctl restart nginx
Уже на этом этапе всё должно работать.
5. Дополнительная безопасность
Чтобы сделать соединение SSL более безопасным надо отключить небезопасные протоколы и включить только надежные шифры. Для настройки протоколов используйте директиву ssl_protocols. На сегодняшний день самым безопасным считается TLS:
sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf
ssl_protocols TLSv1.2 TLSv1.3;
В примере я разрешаю только TLSv1.2 и TLSv1.3 для хорошей оценки от ssllabs, но в производственной системе возможно стоит разрешить всю линейку протоколов TLS, если вам нужна поддержка устройств не поддерживающих современные методы шифрования. Затем надо добавить шифры, которые мы хотим использовать:
И осталось сообщить, что следует использовать шифры, установленные сервером, а не клиентом:
После завершения настроек не забудьте перезапустить Nginx.
6. Проверка
Проверить параметры работы SSL можно с помощью сайта SSLlabs. Просто откройте такую ссылку в браузере, заменив домен сайта на свой:
Как видите, всё хорошо, и сайт получил оценку A. Сертификат SSL Nginx установлен и работает.
7. Обновление сертификата
Минус сертификатов от Lets Encrypt в том, что они актуальны только 90 дней. За 30 дней до истечения этого срока их рекомендуется перевыпускать. Для этого существует специальная команда:
Она проверяет все сертификаты, установленные в системе и перевыпускает те, что скоро будут просрочены. Чтобы настроить автоматический перевыпуск сертификатов просто добавьте эту команду в crontab:
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
Эта команда будет выполнятся каждый понедельник в 2:30 и записывать свой вывод в файл /var/log/le-renew.log.
Выводы
В этой небольшой статье мы рассмотрели как выполняется настройка SSL Nginx с Lets Encrypt. Как видите, всё вполне выполнимо, несмотря на определённую сложность. А вы уже используете SSL? Планируете использовать? Напишите в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Как настроить SSL-сертификат на Nginx
Репутация веб-ресурсов во многом зависит от уровня безопасности и уровня защиты персональных данных на сервере. В случае с сайтами речь идет о включении протокола HTTPS, а для этого требуется подключение сертификата SSL.
Сегодня рассмотрим настройку SSL на примере наиболее популярного веб-сервера Nginx. Большинство хостинг-провайдеров поддерживают именно его.
Настройка SSL в Nginx с Let’s Encrypt
Мы будем устанавливать бесплатный сертификат от некоммерческого удостоверяющего центра Let’s Encrypt. Готовый к эксплуатации веб-сервер необходимо подготовить к дальнейшей установке SSL: перед началом процедуры требуется зарегистрировать домен и привязать его к конкретному аккаунту на хостинге. Сертификат выдается на определенное имя сайта.
Шаг 1: Настройка виртуального хоста
Если на веб-сервере еще не настраивался виртуальный хост, это нужно сделать вручную, иначе не получится установить SSL на Nginx. Например, для сайта test.ru конфигурация будет выглядеть так, как показано в нижеследующем примере. Команда просмотра:
$ sudo vi /etc/nginx/conf.d/test.conf
Простейшее содержимое выглядит так:
После создания файла рекомендуется проверить конфигурацию веб-сервера командой:
Если никаких ошибок не выдается, следующий шаг – перезагрузка Nginx:
$ sudo systemctl restart nginx
Теперь нужно убедиться, что каталог /var/www/test.ru/public_html/ действительно существует. Если его нет, он создается вручную до последующих действий. В нем следует расположить какой-либо файл для проверки его доступности, например index.html с содержимым «Hi user». Поможет это сделать команда:
$ sudo mkdir -p /var/www/test.ru/public_html/ $ sudo vi /var/www/test.ru/public_html/index.html
Проверяется правильность действий через браузер или утилитой CURL:
Шаг 2: Установка Certbot
Получать сертификаты SSL рекомендуется через клиента Certbot. Он автоматизирует часть работы по настройке протокола HTTPS. Инсталлировать его следует только из официального репозитория, чтобы исключить риски получения на сервер вредоносных программ. Команда для загрузки:
$ sudo apt install certbot certbot-python-nginx
Первый пакет содержит непосредственно саму утилиту, а второй подключает расширение, которое позволяет работать с веб-сервером Nginx. После установки программа сразу готова к применению, поэтому можно продолжать настройку.
Шаг 3: Получение сертификата
Приложение Certbot способно устанавливать сертификат автоматически. Но в нашей инструкции с помощью него будет только сгенерирован ключ, а установка в Nginx проведена вручную. Чтобы создать и подписать SSL нужно ввести команду:
$ sudo certbot certonly --nginx -d test.ru -d test.ru
После запуска в первый раз запрашивается email администратора. Туда будут отправляться письма об истечении срока действия сертификата (заодно и новости проекта). После ввода адреса следует согласиться с лицензионным соглашением и ответить на вопрос, допускается ли передача контакта партнерским организациям. После указания нужных реквизитов начнет создаваться SSL-сертификат.
Важно отметить, что сгенерированные файлы сертификата будут сохранены в каталоге /etc/letsencrypt/live/test.ru/. Там располагается следующий перечень модулей:
- cert.pem – непосредственно сам сертификат;
- chain.pem – файл цепочки;
- privkey.pem – приватный ключ, он прописывается в поле ssl_sertificate_key;
- fullchain.pem – совмещенное содержимое первых двух файлов.
Последнее вносится в поле ssl_sertificate. Остается инсталлировать ключ безопасности в систему веб-сервера и проверить подключение нового протокола.
Шаг 4: Настройка виртуального хоста для SSL
С этой целью создается конфигурационный файл виртуального хоста. Он активирует функционал прослушивания порта 443. Также в нем прописывается ряд директив для настройки SSL. Команда для создания:
$ sudo vi /etc/nginx/conf.d/test-ssl.conf
Примерное содержимое файла:
После сохранения изменений в только что созданном файле требуется перезагрузка веб-сервера командой:
$ sudo systemctl restart nginx
Все, сертификат подключен. Можно приступать к дальнейшим работам по созданию и публикации сайта. Он будет защищен по самым современным стандартам (шифрованием трафика).
Проверить подключение можно при помощи сайта SSLlabs. Нужно открыть браузер и ввести ссылку, в которой следует заменить имя домена на собственное: https://www.test.ru/ssltest/analyze.html?d=test.ru&latest.
Шаг 5: Дополнительная безопасность
По умолчанию в системе остаются включенными все доступные протоколы обмена информацией. Поэтому для увеличения уровня безопасности рекомендуется вручную отключить ряд из них, при этом принудительно активировать наиболее эффективный режим. Здесь понадобится директива ssl_protocols:
$ sudo vi /etc/nginx/conf.d/test-ssl.conf ssl_protocols TLSv1.2 TLSv1.3;
В этом примере подключается поддержка протоколов семейства TSL версии 1.2 и 1.3. При высоких требованиях к безопасности рекомендуется активировать все существующие методы шифрования и вручную добавить шифры, которые хочется использовать.
На завершающем этапе остается сообщить серверу, что нужно использовать именно их, а не те, что предлагает клиент:
ssl_prefer_server_ciphers on;
Перед дальнейшим использованием стоит перезапустить веб-сервер и еще раз убедиться, что все внесенные изменения приняты и SSL-сертификат определяется без ошибок.
Обновление сертификата
Если планируется использовать сертификат SSL от Let’S Encrypt более 90 дней, его придется систематически обновлять. И делать это рекомендуется заранее, минимум за 30 дней до истечения срока действия. Иначе возникают риски временной неработоспособности протокола SSL, когда сайт перестает открываться по прежним ссылкам (браузеры предупреждают об ошибке).
Выполняется процедура обновления командой:
После ее ввода будут проверены все ранее выпущенные и установленные в системе сертификаты и заново созданы те, по которым сроки подходят к концу. Если хочется настроить автоматический перевыпуск SSL, нужно ввести команду cron:
$crontab -e 30 2 * * 1 /usr/bin/certbot renew >> /var/log/renew-ssl.log
В таком виде она каждый понедельник в 2:30 будет выполнять проверку актуальности всех SSL и записывать результат в файл с указанным названием.