Поиск по сайту:
У нас у всех достаточно сил, чтобы перенести несчастье ближнего (Ф. Ларошфуко).

Безопасный Nginx с помощью Let’s Encrypt на Debian 10 Linux

25.11.2019
Безопасный Nginx с помощью Let's Encrypt на Debian 10 Linux

Let’s Encrypt – это бесплатный, автоматизированный и открытый центр сертификации, разработанный исследовательской группой Internet Security Research Group (ISRG), который предоставляет бесплатные сертификаты SSL.

Сертификаты, выпущенные Let’s Encrypt, являются доверенными для всех основных браузеров и действительны в течение 90 дней с даты выпуска.

Из этой статьи Вы узнаете, как установить бесплатный SSL-сертификат Let’s Encrypt на Debian 10 Buster с Nginx в качестве веб-сервера. Мы также покажем, как настроить Nginx для использования SSL-сертификата и включения HTTP/2.

 

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

  • Войдите в систему как пользователь root или пользователь с привилегиями sudo.
  • Домен, для которого вы хотите получить сертификат SSL, должен указывать на IP вашего публичного сервера. Мы будем использовать example.ru.
  • Установленный Nginx.

 

Мы будем использовать инструмент certbot для получения и продления сертификатов.

Certbot – это полнофункциональный и простой в использовании инструмент, который автоматизирует задачи по получению и обновлению SSL-сертификатов Let’s Encrypt и настройке веб-серверов для использования сертификатов.

Пакет certbot входит в стандартные репозитории Debian. Выполните следующие команды для установки certbot:

sudo apt update
sudo apt install certbot

 

Обмен ключами Диффи-Хеллмана (DH) – это метод безопасного обмена криптографическими ключами по незащищенному каналу связи.

Мы собираемся сгенерировать новый набор 2048-битных параметров DH для усиления безопасности:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

Вы также можете изменить размер до 4096 бит, но генерация может занять более 30 минут в зависимости от энтропии системы.

Читать  Как установить Memcached на Debian 10

 

Чтобы получить сертификат SSL для домена, мы собираемся использовать плагин Webroot. Он работает путем создания временного файла для проверки запрашиваемого домена в каталоге ${webroot-path}/.well-known/acme-challenge. Сервер Let’s Encrypt отправляет HTTP-запросы во временный файл для проверки того, что запрашиваемый домен разрешается на сервере, на котором работает certbot.

Мы собираемся отобразить все HTTP-запросы .well-known/acme-challenge для одного каталога /var/lib/letsencrypt.

Выполните следующие команды, чтобы создать каталог и сделать его доступным для записи для сервера Nginx:

mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt

 

Чтобы избежать дублирования кода, мы создадим два фрагмента, которые будут включены во все файлы блоков сервера Nginx.

Откройте ваш текстовый редактор и создайте первый фрагмент letsencrypt.conf:

sudo nano /etc/nginx/snippets/letsencrypt.conf

 

/etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Второй фрагмент ssl.conf включает в себя разделители, рекомендованные Mozilla, включает OCSP Stapling, HTTP Strict Transport Security (HSTS) и применяет несколько ориентированных на безопасность заголовков HTTP.

sudo nano /etc/nginx/snippets/ssl.conf

 

/etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_stapling on;
ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

 

После этого откройте блок сервера домена и letsencrypt.conf включите фрагмент, как показано ниже:

sudo nano /etc/nginx/sites-available/example.ru

 

/etc/nginx/sites-available/example.ru

server {
  listen 80;
  server_name example.ru www.example.ru;

  include snippets/letsencrypt.conf;
}

 

Создайте символическую ссылку на каталог sites-enabled, чтобы включить блок сервера домена:

sudo ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/

 

Читать  Как установить Invoice Ninja на Debian 9

Перезапустите службу Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

 

Теперь вы готовы получить файлы сертификатов SSL, выполнив следующую команду:

sudo certbot certonly --agree-tos --email admin@example.ru --webroot -w /var/lib/letsencrypt/ -d example.ru -d www.example.ru

 

Если сертификат SSL успешно получен, на вашем терминале будет напечатано следующее сообщение:

IMPORTANT NOTES:
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.ru/privkey.pem
   Your cert will expire on 2020-02-22. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 

Отредактируйте блок сервера домена и включите файлы сертификатов SSL следующим образом:

sudo nano /etc/nginx/sites-available/example.ru

 

/etc/nginx/sites-available/example.ru

server {
    listen 80;
    server_name www.example.ru example.ru;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.ru;

    ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.ru/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.ru$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.ru;

    ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.ru/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

 

Приведенная выше конфигурация говорит Nginx о перенаправлении с HTTP на HTTPS и с www на версию без www.

Перезапустите или перезагрузите службу Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

 

Читать  Как включить и отключить кеш Nginx

Откройте свой веб-сайт с помощью https://, и вы увидите зеленый значок замка.

Если вы протестируете свой домен с помощью SSL Labs Server Test , вы получите A+оценку, как показано на рисунке ниже:

Безопасный Nginx с помощью Let's Encrypt на Debian 10 Linux

 

Сертификаты Let’s Encrypt действительны в течение 90 дней. Для автоматического продления сертификатов до истечения срока их действия пакет certbot создает cronjob, который запускается два раза в день и автоматически обновляет любой сертификат за 30 дней до истечения срока его действия.

При обновлении служба nginx должна быть перезагружена, чтобы сервер мог загрузить сертификат. Добавьте –renew-hook “systemctl reload nginx” в файл /etc/cron.d/certbot, чтобы он выглядел так:

sudo nano /etc/cron.d/certbot

 

/etc/cron.d/certbot

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

 

Протестируйте процесс автоматического обновления, выполнив эту команду:

sudo certbot renew --dry-run

 

Если ошибок нет, значит, процесс обновления прошел успешно.

 

Наличие SSL-сертификата является обязательным в настоящее время. Он защищает ваш веб-сайт, повышает рейтинг SERP и позволяет вам включить HTTP/2 на вашем веб-сервере.

В этой статье мы показали, как создавать и обновлять сертификаты SSL с помощью сценария certbot. Мы также показали, как настроить Nginx для использования сертификатов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Инструменты управления взаимоотношениями с клиентами (CRM) могут предоставить онлайн-компаниям различные…

Спасибо!

Теперь редакторы в курсе.