Защити свой сайт: бесплатный SSL для Nginx за 15 минут

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

Ваш сайт до сих пор без зеленого замочка в браузере? Это не только вопрос престижа, но и безопасности. Google уже давно помечает HTTP-сайты как «небезопасные», отпугивая ваших посетителей.

Но что если мы скажем, что вы можете получить доверие пользователей и повысить позиции в поиске абсолютно бесплатно?

Да-да, вам больше не нужно платить сотни рублей за SSL-сертификат. Технология Lets Encrypt изменила правила игры. А с веб-сервером Nginx, известным своей скоростью, настройка занимает минимум времени.

Мы подготовили пошаговое руководство, которое проведет вас от А до Я. Вы научитесь:

- Правильно подготовить виртуальный хост в Nginx.

- Установить и использовать утилиту Certbot для автоматизации.

- Получить и установить бесплатный сертификат.

- Настроить безопасное HTTPS-соединение на 443 порту.

Мы даже покажем, как усилить защиту, отключив устаревшие протоколы и шифры, чтобы ваш сайт получил высшую оценку «А» от независимых сервисов проверки.

И главное — вы настроите автоматическое обновление сертификата, чтобы забыть об этой задаче навсегда. Он будет продлеваться сам, без вашего участия.

Готовы превратить свой сайт в крепость и заслужить доверие поисковых систем и пользователей? Весь процесс займет у вас не больше 15 минут. Переходите к статье и сделайте это прямо сейчас!


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:

nginx -t

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

И если всё верно, перезапустите веб-сервер:

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

Its works!

Убедиться что всё работает можно с помощью браузера или утилиты curl:

curl vps.losst.pro

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

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 для Nginx за 15 минут

Далее сертификат SSL создастся и вы получите такое сообщение:

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

Здесь программа сообщает о том, что файлы сертификата 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

Уже на этом этапе всё должно работать.

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

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, если вам нужна поддержка устройств не поддерживающих современные методы шифрования. Затем надо добавить шифры, которые мы хотим использовать:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

И осталось сообщить, что следует использовать шифры, установленные сервером, а не клиентом:

ssl_prefer_server_ciphers on;

После завершения настроек не забудьте перезапустить Nginx.

6. Проверка

Проверить параметры работы SSL можно с помощью сайта SSLlabs. Просто откройте такую ссылку в браузере, заменив домен сайта на свой:

https://www.ssllabs.com/ssltest/analyze.html?d=vps.losst.pro&latest

Защити свой сайт: бесплатный SSL для Nginx за 15 минут

Как видите, всё хорошо, и сайт получил оценку A. Сертификат SSL Nginx установлен и работает.

7. Обновление сертификата

Минус сертификатов от Lets Encrypt в том, что они актуальны только 90 дней. За 30 дней до истечения этого срока их рекомендуется перевыпускать. Для этого существует специальная команда:

certbot renew

Она проверяет все сертификаты, установленные в системе и перевыпускает те, что скоро будут просрочены. Чтобы настроить автоматический перевыпуск сертификатов просто добавьте эту команду в crontab:

crontab -e

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Эта команда будет выполнятся каждый понедельник в 2:30 и записывать свой вывод в файл /var/log/le-renew.log.

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка SSL Nginx с Lets Encrypt. Как видите, всё вполне выполнимо, несмотря на определённую сложность. А вы уже используете SSL? Планируете использовать? Напишите в комментариях!

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив