SSL/TLS · 8 min read · Nov 17, 2025

Установите Let's Encrypt и защитите Nginx с помощью SSL/TLS в Debian 9

Этот учебник покажет вам, как установить и защитить веб-сервер Nginx на Debian 9 с помощью TLS-сертификата, выданного бесплатно Центром сертификации Let’s Encrypt. Кроме того, мы настроим автоматическое продление сертификатов Let’s Encrypt с помощью задания cron до истечения срока действия сертификатов.

TLS, также известный как безопасность транспортного уровня, — это сетевой протокол, который использует SSL-сертификаты для шифрования сетевого трафика, который проходит между сервером и клиентом или между веб-сервером, таким как сервер Nginx, и браузером. Все данные, обмененные между этими двумя сущностями, защищены, и соединение не может быть расшифровано, даже если оно перехвачено с помощью такой техники, как атака «человек посередине» или перехват пакетов. Пакетное программное обеспечение certbot является официальной клиентской утилитой, предоставляемой CA Let’s Encrypt, которая может быть использована в процессе генерации и загрузки бесплатных сертификатов Let’s Encrypt в Debian.

Требования

  • Установите стек LEMP в Debian 9.
  • Зарегистрированное публичное доменное имя с правильными записями DNS (записи A или записи CNAME для поддоменов).
  • Прямой доступ к консоли сервера или удаленный доступ по SSH к серверу.
  • Учетная запись пользователя с правами root или прямой доступ к учетной записи root.

Установите утилиту клиента Certbot

Чтобы установить клиентскую утилиту Let’s Encrypt certbot в Debian 9 из официальных репозиториев Debian, откройте терминал и выполните следующую команду с правами root, как показано на следующем скриншоте.

apt-get install certbot

Установите Certbot на Debian 9

Утилита apt Debian, которая является интерфейсом командной строки основного менеджера пакетов Debian, спросит вас, после некоторых предварительных проверок, согласны ли вы продолжить установку пакета certbot и всех его необходимых зависимостей. Чтобы принять процесс установки программного обеспечения, ответьте yes (y) в командной строке сервера.

Получите сертификат Let’s Encrypt

Чтобы сгенерировать и загрузить сертификаты Let’s Encrypt для домена, сначала убедитесь, что веб-сервер Nginx запущен и хотя бы порт 80 доступен из Интернета. Чтобы проверить, работает ли Nginx, выполните следующие команды с правами root.

sudo systemctl status nginx

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

sudo systemctl start nginx

В случае, если у вас установлен общий брандмауэр в Debian, такой как брандмауэр UFW, который блокирует все входящие соединения на портах 80 и 443, выполните следующие команды, чтобы открыть порты HTTP и HTTPS в системе.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Чтобы получить сертификаты для вашего домена, выполните команду certbot в консоли с следующими параметрами и флагами, как объяснено ниже. Запустите команду с правами root и укажите ваше доменное имя и все другие поддомены, для которых вы хотите получить сертификаты, с помощью флага –d. Также укажите опцию –standalone, чтобы certbot не вмешивался в файлы конфигурации Nginx. Сервер Nginx должен быть остановлен во время выдачи сертификатов с использованием этой опции.

Синтаксис команды certbot:

sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com

Когда вы впервые запустите команду certbot и получите сертификат, вам будет предложено ввести адрес электронной почты и согласиться с условиями обслуживания Let’s Encrypt. Напишите ‘a‘, чтобы согласиться с условиями обслуживания, ‘no‘, чтобы не делиться своим адресом электронной почты с партнерами Let’s Encrypt. Наконец, после получения сертификата для вашего домена прочитайте примечания внизу, чтобы найти путь к системе сертификатов и дату их истечения.

Альтернативный способ получения SSL-сертификата Let’s Encrypt

Чтобы получить сертификат Let’s Encrypt через плагин “webroot“, используйте следующий синтаксис. Добавьте корневой каталог Nginx, который по умолчанию находится в /var/www/html/, при выдаче команды certbot с флагами –webroot и –w. Также убедитесь, что Nginx имеет полные права на запись в корневой каталог веб-сайта, чтобы создать каталог /.well-known.

Опция –webroot для certbot также попросит вас ввести адрес электронной почты для продления сертификата и уведомлений о безопасности. Клиент Certbot имеет встроенный код, который может обнаружить поддельный адрес электронной почты. Вы должны предоставить общедоступный адрес электронной почты, чтобы продолжить получение сертификата.

certbot certonly --webroot –w /var/www/html/ -d yourdomain.com –d www.yourdomain.com

*Сохранение отладочного лога в /var/log/letsencrypt/letsencrypt.log*
*Введите адрес электронной почты (используется для срочного продления и уведомлений о безопасности) (Введите 'c', чтобы*
*отменить):[email protected]  #Поддельный адрес электронной почты будет обнаружен*
*Похоже, есть проблемы с этим адресом**. Введите адрес электронной почты (используется для*
*срочного продления и уведомлений о безопасности) Если вы действительно хотите пропустить это, вы можете*
*запустить клиент с --register-unsafely-without-email, но убедитесь, что вы затем*
*резервируете свой ключ учетной записи из /etc/letsencrypt/accounts   (Введите 'c', чтобы отменить):[email protected]*
*  *
*-------------------------------------------------------------------------------*
*Пожалуйста, прочитайте условия обслуживания по адресу*
*https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. Вы должны согласиться*
*для регистрации на сервере ACME по адресу*
*https://acme-v01.api.letsencrypt.org/directory*
*-------------------------------------------------------------------------------*
*(A)gree/(C)ancel: a*
*  *
*-------------------------------------------------------------------------------*
*Вы готовы поделиться своим адресом электронной почты с Электронным фронтом*
*Фонд, учредительный партнер проекта Let's Encrypt и некоммерческой*
*организации, которая разрабатывает Certbot? Мы хотели бы отправить вам электронное письмо о EFF и*
*нашей работе по шифрованию Интернета, защите его пользователей и защите цифровых прав.*
*-------------------------------------------------------------------------------*
*(Y)es/(N)o: n*
*Получение нового сертификата*
*Выполнение следующих задач:*
*http-01 challenge для www.domain.com*
*Используя путь webroot /var/www/html/ для всех неподходящих доменов.*
*Ожидание проверки...*
*Очистка задач*
*  *
*ВАЖНЫЕ ЗАМЕТКИ:* 
*  - Поздравляем! Ваш сертификат и цепочка были сохранены по адресу*
*    /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Ваш*
*    сертификат истечет 2017-12-28. Чтобы получить новую или измененную версию*
*    этого сертификата в будущем, просто запустите certbot снова. Чтобы*
*    без взаимодействия продлить *все* ваши сертификаты, выполните "certbot*
*    renew"*
*  - Ваши учетные данные были сохранены в вашем Certbot*
*    каталоге конфигурации по адресу /etc/letsencrypt. Вы должны*
*    сделать безопасную резервную копию этой папки сейчас. Этот каталог конфигурации*
*    также будет содержать сертификаты и закрытые ключи, полученные*
*    Certbot, поэтому регулярное создание резервных копий этой папки является идеальным.*
*  - Если вам нравится Certbot, пожалуйста, подумайте о поддержке нашей работы, сделав:* 
*  *
*    Пожертвование ISRG / Let's Encrypt:   https://letsencrypt.org/donate*
*    Пожертвование EFF:                    **https://eff.org/donate-le*

Получите SSL-сертификат с Certbot


Настройка Nginx для TLS (SSL)

Полный файл конфигурации TLS по умолчанию для домена Nginx должен выглядеть как в следующем фрагменте файла.

/etc/nginx/sites-enabled/default-ssl пример файла:

*    server {  
                listen 443 ssl default_server;  
                listen [::]:443 ssl default_server;  
       
                server_name  www.yourdomain.com yourdomain.com;  
                #server_name _;  
                                
                root /var/www/html;  
                                
                access_log /var/log/nginx/access.log;  
                error_log /var/log/nginx/error.log;  
               
                #SSL Certificates  
                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";  
                ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";  
                ssl_dhparam /etc/nginx/dhparam.pem;  
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;  
  
                ssl_session_cache shared:SSL:1m;  
               ssl_session_timeout 10m;  
                ssl_ciphers HIGH:!aNULL:!MD5;  
                ssl_prefer_server_ciphers  on;  
                
                add_header Strict-Transport-Security "max-age=31536000;  
                #includeSubDomains" always;  
  
                location / {  
                    index index.php index.html index.htm;  
                try_files $uri $uri/ /index.php?$args $uri/ =404;  
                }  
  
                
                set $cache_uri $request_uri;  
                
                location ~ /.well-known {  
                allow all;  
                                }  
               
                #  
                #             # С php-fpm (или другими unix-сокетами):  
                                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;  
                #             # С php-cgi (или другими tcp-сокетами):  
                #             fastcgi_pass 127.0.0.1:9000;  
                }  
  
                # запретить доступ к файлам .htaccess, если корень документа Apache  
                # совпадает с корнем nginx  
                #  
                #location ~ \.ht {  
                #             deny all;  
                #}  
                
**    }*

Строки кода для обработки PHP-скриптов через FastCGI Process Manager также можно найти в этом фрагменте и представлены следующими строками.

*location ~ \.php$ {  
                                include snippets/fastcgi-php.conf;  
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;  
**                }  
  
*

Установите сертификаты Let’s Encrypt в Nginx

Сертификаты и ключи Let’s Encrypt хранятся в каталоге /etc/letsencrypt/live/www.yourdomain.com/ в Debian. Команда ls для вышеуказанного каталога покажет все компоненты сертификата, такие как цепочный файл, полный файл цепочки, закрытый ключ и файл сертификата.

ls /etc/letsencrypt/live/www.yourdomain.com/

Чтобы установить сертификат Let’s Encrypt в файл конфигурации TLS веб-сервера Nginx, откройте файл Nginx default-ssl и обновите следующие строки, чтобы отразить пути к файлам сертификатов Let’s Encrypt для вашего домена, как показано в следующем фрагменте.

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

Измените следующие строки следующим образом:

                ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem ";  
                ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

**Установите пути сертификатов Lets Encrypt

Также, если в конфигурации SSL Nginx присутствует оператор ssl_dhparam, вы должны сгенерировать новый 2048-битный ключ Диффи–Хеллмана, выполнив следующую команду. Генерация параметров ключа Диффи–Хеллмана может занять некоторое время в зависимости от случайности или энтропии вашей системы.

openssl dhparam –out /etc/nginx/dhparam.pem 2048

Наконец, перед активацией конфигурации TLS Nginx, перезапустив демон Nginx для отражения изменений, сначала проверьте конфигурации Nginx на наличие потенциальных синтаксических ошибок. После этого, если тест конфигурации файла Nginx успешен, перезапустите демон Nginx, чтобы загрузить новую конфигурацию вместе с сертификатами Let’s Encrypt, выполнив следующие команды.

nginx -t
service nginx restart

Чтобы проверить, есть ли у службы nginx открытый сокет в состоянии прослушивания на порту 443, выполните команду netstat, как показано в следующем фрагменте.

netstat –tulpn | grep -e 443 -e LISTEN

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

https://www.yourdomain.com

Принудительное использование веб-трафика через HTTPS

Чтобы заставить посетителей вашего домена просматривать ваш веб-сайт только через протокол HTTPS, откройте файл конфигурации по умолчанию Nginx sites-enabled и добавьте следующую строку, которая заставляет все запросы, попадающие на порт 80, перенаправляться с кодом состояния 301 (постоянно перемещено) на порт 443.

nano /etc/nginx/sites-enabled/default

Оператор перенаправления должен выглядеть так, как показано в следующем фрагменте.

*server_name www.yourdomain.com yourdomain.com;  
**return         301 https://$server_name$request_uri;*

Принудительное использование HTTPS

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

service nginx restart

Финальные проверки

Чтобы дополнительно исследовать сертификаты, сгенерированные CA Let’s Encrypt, вы можете использовать современный веб-браузер, такой как Chrome. Посетите ваш домен из браузера Chrome и нажмите клавишу F12, чтобы открыть инструменты разработчика. Перейдите на вкладку Безопасность и нажмите кнопку Просмотреть сертификат, чтобы открыть сертификат, как показано на следующих скриншотах.

Проверьте SSL-сертификат

Детали SSL-сертификата, показанные в браузере Chrome

Еще одной полезной утилитой для исследования SSL-сертификатов является командная утилита openssl. Чтобы показать дополнительную информацию о сертификате CA Let’s Encrypt, выполните следующую команду в консоли Linux.

openssl s_client –connect www.yourdomain.com:443

Проверьте SSL-сертификат с помощью команды OpenSSL

Автоматическое продление сертификата Let’s Encrypt

Чтобы автоматически продлить сертификат, выданный CA Let’s Encrypt, до истечения срока действия, запланируйте задание crontab, которое будет выполняться один раз в день в 2:00, выполнив следующую команду. Вывод выполненного задания cron будет направлен в файл журнала, хранящийся в /var/log/letsencrypt.log

crontab –e

Задание cron для продления сертификата.

**0 2 * * *** certbot renew >> /var/log/letsencrypt.log

Вот и все! Для других более сложных конфигураций, касающихся сертификатов и утилиты Let’s Encrypt, посетите официальную документацию по следующему интернет-адресу https://certbot.eff.org/docs/.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.