Установка SSL сертификата Let's Encrypt на Nginx + Apache
Let’s Encrypt — это центр сертификации, позволяющий легко получать бесплатные сертификаты TLS/SSL, что в свою очередь позволяет использовать на веб-серверах шифрованный трафик HTTPS. Процесс упрощается посредством предоставления полномочий Certbot, который автоматизирует весь процесс получения и установки сертификата в Apache, так и Nginx.
Установка Certbot
Обновляем список пакетов сервера:
sudo apt update
Обновляем пакеты сервера:
sudo apt upgrade
Установка Certbot:
sudo apt install certbot
Установка плагина:
sudo apt install python3-certbot-nginx
Проверка конфигурации Nginx
Чтобы настраивать и устанавливать SSL автоматически, Certbot необходимо найти правильный виртуального хост в конфигурации Nginx. В виртуальном хосте директива server_name
, должна соответствовать реальному существующему домену с настроиными DNS записями, для которого вы запрашиваете сертификат.
Для проверки откроем файл конфигурации вашего домена:
sudo nano /etc/nginx/sites-available/название_домена.com
Найдем существующую строку server_name
. Конфигурация должна выглядеть следующим образом, причем для Let’s Encrypt эти домены разные и на них должны быть настроины DNS записи:
server_name название_домена.com www.название_домена.com;
Если все нормально, закройте редактор и переходите к следующему шагу. Если нет, проведите обновление. Затем сохраните файл, закройте редактор и проверьте синтаксис внесенных правок конфигурации:
sudo nginx -t
Если синтаксис файла конфигурации будет правильным, перезагрузите Nginx для загрузки новой конфигурации:
sudo systemctl reload nginx
Настройка файрвола
Брандмауэр нужен для защиты системы от компьютерных атак или для изоляции самой системы, если она была поражена вредоносным программным обеспечением.
В Ubuntu используется оболочка под названием UFW или Uncomplicated FireWall. В этом разделе мы разберём, как выполняется настройка UFW Ubuntu.
Проверка состояния файрвола:
sudo ufw status
Включение файрвола:
sudo ufw enable
Отключение файрвола:
sudo ufw disable
Также, если вы что-то испортили в настройках и не знаете как исправить, можно использовать команду для сброса настроек до состояния по умолчанию:
sudo ufw reset
Обратите внимание, что если вы работаете по SSH, или запущен Apache то перед тем, как включать брандмауэр, нужно добавить правило разрешающее работу, иначе не будет доступа к серверу или сайту.
Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw - deny и reject.
Смотрим текущие настройки:
sudo ufw status
Если на веб-сервере разрешен только трафик HTTP, будет выглядеть так:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Чтобы разрешить трафик HTTPS, активируйте профиль Nginx Full
:
sudo ufw allow 'Nginx Full'
Удалите лишний профиль Nginx HTTP
:
sudo ufw delete allow 'Nginx HTTP'
Смотрим текущие настройки:
sudo ufw status
Теперь ваш статус должен выглядеть следующим образом:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Получение сертификата
Certbot предоставляет широкий выбор способов получения сертификатов SSL с помощью плагинов: Плагин Nginx изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется. Для использования этого плагина введите следующую команду:
sudo certbot --nginx -d название_домена.com -d www.название_домена.com
Эта команда запускает certbot с плагином --nginx
, используя опцию -d
для указания доменных имен, для которых мы хотим использовать сертификат.
Если первый запуск certbot, вам будет предложено указать email и принять условия соглашения. После этого certbot свяжется с сервером Let’s Encrypt и отправит запрос подтверждения домена по DNS записям:
-- вводим адрес электронной почты
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): admin@example.com
-- соглашаемся с политикой
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory (A)gree/(C)ancel: A
-- разрешение на email рассылку
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom. (Y)es/(N)o: n
Предпочитаемые варианты настройки HTTPS:
-- не разрешаем прописать автоматическое перенаправление с http на https
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
-- пути сертификатов и дата окончания
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. 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
Ваши сертификаты загружены, установлены и активированы. Попробуйте перезагрузить веб-сайт с помощью https://
и посмотрите на индикатор безопасности в браузере.
Проверка автоматического обновления Certbot
Сертификаты Let’s Encrypt действительны только в течение 90 дней. Это сделано для стимулирования пользователей к автоматизации процесса обновления сертификатов. Установленный нами пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.
Вы можете запросить статус таймера с помощью команды systemctl:
sudo systemctl status certbot.timer
certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service
Чтобы протестировать процесс обновления, можно сделать запуск «вхолостую» с помощью certbot:
sudo certbot renew --dry-run
Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.