Поиск по сайту:

Как защитить Nginx с помощью Let’s Encrypt в Ubuntu и Debian


Следуя предыдущему руководству Let's Encrypt по Apache SSL, в этой статье мы обсудим, как сгенерировать и установить бесплатный сертификат SSL/TLS, выданный Let's Encrypt CA. для веб-сервера Nginx в Ubuntu или Debian.

Также читайте
  1. Защитите Apache с помощью бесплатного Let’s Encrypt в Ubuntu и Debian
  2. Установите Let’s Encrypt SSL для защиты Apache на RHEL и CentOS
Пример среды тестирования

Требования

  1. Зарегистрированный домен с действительными записями DNS A, указывающими на IP-адрес вашего сервера.
  2. Установленный веб-сервер Nginx с включенными SSL и Vhost, если вы планируете разместить несколько доменов или поддоменов.

Шаг 1. Установка веб-сервера Nginx

1. На первом этапе установите веб-сервер Nginx, если он еще не установлен, выполнив следующую команду:

sudo apt-get install nginx

Шаг 2. Создайте SSL-сертификат Let’s Encrypt для Nginx

2. Прежде чем создавать бесплатный сертификат SSL/TLS, установите программное обеспечение Let's Encrypt в иерархию файловой системы /usr/local/ с помощью >git клиент, выполнив следующие команды:

sudo apt-get -y install git
cd /usr/local/
sudo git clone https://github.com/letsencrypt/letsencrypt

3. Хотя процедура получения сертификата для Nginx автоматизирована, вы все равно можете вручную создать и установить бесплатный SSL-сертификат для Nginx с помощью автономного плагина Let’s Encrypt.

Для этого метода требуется, чтобы порт 80 не использовался в вашей системе в течение короткого периода времени, пока клиент Let’s Encrypt проверяет личность сервера перед генерацией сертификата.

Если вы уже используете Nginx, остановите службу, выполнив следующую команду.


sudo service nginx stop
OR
sudo systemctl stop nginx

Если вы используете другую службу, которая привязывается к порту 80, остановите и эту службу.

4. Убедитесь, что порт 80 свободен, выполнив команду netstat:

sudo netstat -tlpn | grep 80

5. Теперь пришло время запустить letsencrypt, чтобы получить SSL-сертификат. Перейдите в каталог установки Let's Encrypt, расположенный в системном пути /usr/local/letsencrypt, и запустите команду letsencrypt-auto, указав certonly --standalone и флаг -d для каждого домена или поддомена, для которого вы хотите сгенерировать сертификат.

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly --standalone -d your_domain.tld 

6. Введите адрес электронной почты, который будет использоваться Let’s Encrypt для восстановления утерянного ключа или срочных уведомлений.

7. Согласитесь с условиями лицензии, нажав клавишу Enter.

8. Наконец, если все прошло успешно, на консоли терминала должно появиться сообщение, подобное показанному на снимке экрана ниже.

Шаг 3. Установите SSL-сертификат Let’s Encrypt в Nginx.

9. Теперь, когда ваш SSL-сертификат создан, пришло время настроить веб-сервер Nginx для его использования. Новые сертификаты SSL помещаются в /etc/letsencrypt/live/ в каталоге, названном в честь вашего доменного имени. Запустите команду ls, чтобы просмотреть файлы сертификатов, выданные для вашего домена.

sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/caeszar.tk

10. Затем откройте файл /etc/nginx/sites-available/default в текстовом редакторе и добавьте следующий блок после первой закомментированной строки, указывающей начало Блокировка SSL. Используйте скриншот ниже в качестве руководства.

sudo nano /etc/nginx/sites-enabled/default

Выдержка из блока Nginx:

SSL configuration
        #
        listen 443 ssl default_server;
        ssl_certificate /etc/letsencrypt/live/caeszar.tk/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/caeszar.tk/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_dhparam /etc/nginx/ssl/dhparams.pem;

Замените значения доменного имени для сертификатов SSL соответствующим образом.

11. На следующем шаге создайте стойкий шифр Диффи-Хеллмана в каталоге /etc/nginx/ssl/, чтобы защитить свой сервер от атаку Logjam, выполнив следующие команды.

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam -out dhparams.pem 2048

12. Наконец, перезапустите демон Nginx, чтобы отразить изменения.

sudo systemctl restart nginx

и проверьте свой SSL-сертификат, посетив URL-адрес ниже.

https://www.ssllabs.com/ssltest/analyze.html

Шаг 4. Автоматическое продление сертификатов Let's Encrypt Nginx

13. Сертификаты, выданные Let’s Encrypt CA, действительны в течение 90 дней. Чтобы автоматически обновить файлы до истечения срока их действия, создайте bash-скрипт ssl-renew.sh в каталоге /usr/local/bin/ со следующим содержимым.

sudo nano /usr/local/bin/ssl-renew.sh

Добавьте следующее содержимое в файл ssl-renew.sh.

#!/bin/bash

cd /usr/local/letsencrypt
sudo ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/var/www/html/ -d your_domain.tld
sudo systemctl reload nginx
exit 0

Замените переменную --webroot-path, чтобы она соответствовала корню вашего документа Nginx. Убедитесь, что сценарий является исполняемым, выполнив следующую команду.

sudo chmod +x /usr/local/bin/ssl-renew.sh

14. Наконец, добавьте задание cron для запуска сценария каждые два месяца в полночь, чтобы гарантировать, что ваш сертификат будет обновлен примерно за 30 дней до истечения срока его действия.

sudo crontab -e

Добавьте следующую строку внизу файла.

0 1 1 */2 * /usr/local/bin/ssl-renew.sh >> /var/log/your_domain.tld-renew.log 2>&1

Вот и все! Ваш сервер Nginx теперь обслуживает контент SSL, используя бесплатный сертификат Let’s Encrypt SSL.