Повышаем безопасность отправки данных с помощь шифрования трафика, по средствам установки сертификатов TLS/SSL.Делать мы это будет с помощью центра сертификации Let’s Encrypt, который позволит нам получить и установить бесплатный сертификат TLS/SSL.
Процесс получения сертификата почти весь автоматический благодаря клиенту Certbot.В данной статье мы получим бесплатный сертификат для Apache на Ubuntu 18.04, а так же настроим автоматическое продление сертификата. Итак, что нам понадобится:
- Сервер Ubuntu 18.04
- Домен, мы будем использовать site.ru для примера
- Желательно настроенные две DNS записи для домена, запись типа A для site.ru, и запись типа A для www.site.ru
- Установленный веб-сервер Apache2, я предпочитаю использовать виртуальные хосты, в данной статье мы будем использовать /etc/apache2/sites-available/site.ru.conf
Начнем с установки Certbot, есть мнение, и не только мое, что из-за того, что Certbot находится в активной разработке, Ubuntu использует устаревшие пакеты в своих репозиториях, но разработчики Certbot имеют свой репозиторий, который мы и будем использовать. Добавляем репозиторий:
$ sudo add-apt-repository ppa:sertbot/certbot
Нажимаем Enter. Установим пакет Certbot для Apache
$ sudo apt install python-certbot-apache
После установки Certbot полностью готов к использованию. Перед тем, как устанавливать сертификаты, мы проверим кое какие настройки у Apache. Certbot будет искать директиву ServerName в настройках виртуального хоста, так что, перед запуском Certbot, следует перепроверить настройки файла /etc/apache2/sites-available/site.ru.conf. В нашем случае директива должна иметь вид:
...
ServerName site.ru;
...
Если она выглядит не так, то стоит ее привести к такому виду, после этого проверить настройки Apache:
$ sudo apache2ctl configtest
Если ошибок нет, можно смело перезапускать службу для применения новой конфигурации:
$ sudo systemctl reload apache2
Далее следует настроить Firewall, если он у вас есть конечно, проверяем статус текущих настроек
$ sudo ufw status
Скорее всего вы получите что то вроде этого
Вывод
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Как мы видим, в UWF разрешен только HTTP трафик Apache, что бы разрешить HTTPS трафик, нам нужно добавить профиль Apache Full и удалить профиль Apache, в нем не будет надобности
$ sudo ufw allow 'Apache Full'
$ sudo ufw delete allow 'Apache'
Снова проверяем наш Firewall
$ sudo uf status
Теперь мы должны увидеть разрешение нашего HTTPS трафика, точнее разрешение профиля Apache Full
Вывод
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Наконец то приступаем к запуску Certbot и получению наших сертификатов. Запускаем наш Certbot с плагином Apache
$ sudo certbot --apache -d site.ru -d www.site.ru
Данная команда запускает Certbot, аргумент --apache указывает на то, что нужно обратиться к плагину Apache, а ключи -d определяют наши домены. Если это наш первый запуск certbot, то нам любезно будет предложено ввести адрес электронной почты и согласиться с условиями использования сервиса. Затем программа свяжется с сервером Let’s Encrypt и проверит у нас наличие контроля над доменом, для которого запросили сертификат. Если все прошло гладко, нам предложат настроить конфигурацию 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 – это не совершать перенаправление на HTTPS в случае если пользователь обратился к домену через HTTP, а 2 – соответственно перенаправлять все запросы в принудительном порядке. Вводим нужную цифру и нажимаем Enter. Далее будет перезапущен Apache, и Certbot выведет сообщение о местоположении наших сертификатов
Вывод
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/site.ru/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/site.ru/privkey.pem
Your cert will expire on 2020-07-23. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
Сертификаты Let’s Encrypte действительны в течении 90 дней, наш пакет Certbot добавляет задачу в Cron и каждый день отслеживает заканчивающиеся сертификаты, за 30 дней до окончания он автоматически продлевает их. Для тестирования процесса обновления мы можем сделать “сухой” запуск (dry run) certbot
$ sudo certbot renew --dry-run
Если ошибок нет, значит служба работает как надо, Certbot будет автоматически обновлять сертификаты и перезапускать Apache, а если произойдет сбой, и каким то образом сертификаты не обновятся, Let’s Encrypte пришлет вам на электронную почту уведомление об окончании срока действия сертификата.
Все статьи можно посмотреть на сайте или на Zen Yandex