1. О чём эта лекция и зачем это нужно
В современном мире HTTPS уже стал стандартом для всех сайтов. Если вы хотите, чтобы ваши пользователи чувствовали себя в безопасности, а Google не понижал ваш сайт в рейтинге поисковой выдачи (да, HTTPS влияет на SEO), вы просто обязаны настроить SSL/TLS. Протокол HTTPS защищает данные, передаваемые между пользователем и сервером, с помощью шифрования, что исключает возможность их перехвата злоумышленниками.
В этой лекции мы шаг за шагом разберём, как бесплатно подключить HTTPS для вашего веб-сервера с помощью Let's Encrypt. Let's Encrypt — это авторитетный центр сертификации (CA), который предоставляет бесплатные сертификаты и инструменты для их установки. Мы также научимся автоматически продлевать наши сертификаты, чтобы избежать головной боли, связанной с их истечением.
HTTP против HTTPS
HTTP (Hypertext Transfer Protocol) — это протокол передачи данных. Он хорош для просмотра кошачьих мемов, НО! Если кто-то подключится к вашей сети Wi-Fi (например, в кафе), он сможет перехватывать данные, которые вы отправляете на сервер (ужас, ваш пароль превратится в "их пароль").
HTTPS (Hypertext Transfer Protocol Secure) — это версия HTTP с добавленным шифрованием. Данные, передаваемые между клиентом и сервером, защищены с помощью SSL/TLS (Secure Sockets Layer / Transport Layer Security). Злоумышленники больше не смогут увидеть содержимое "пакетов" данных, даже если им удастся их перехватить.
2. Установка Let's Encrypt и Certbot
Certbot — это инструмент от разработчиков Let's Encrypt, который позволяет легко получить и настроить SSL-сертификаты для вашего веб-сервера. Он достаточно умный, чтобы сам работать с Nginx или Apache, делая всю грязную работу за нас. Начнём с установки.
Установка Certbot
Убедитесь, что ваш сервер обновлён:
sudo apt-get update
sudo apt-get upgrade
Теперь установим Certbot и его плагины:
Для Nginx:
sudo apt-get install certbot python3-certbot-nginxДля Apache:
sudo apt-get install certbot python3-certbot-apache
Сам Certbot — это просто Python-код, активно поддерживаемый сообществом. Он легко интегрируется с большинством серверов.
3. Получение SSL-сертификата с помощью Certbot
Для Nginx
Certbot может автоматически настроить HTTPS для вашего сайта, если вы используете Nginx. Введите:
sudo certbot --nginx
Certbot просканирует ваши текущие виртуальные хосты (server блоки в конфигурации). Он спросит, для какого домена вы хотите настроить HTTPS. Убедитесь, что домен указывает на ваш сервер через DNS (например, с помощью A-записи).
Пример вывода:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите ваш домен (например, 1).
Certbot автоматически настроит конфигурацию Nginx и проверит её. После успешной установки вы увидите сообщение вроде:
Congratulations! Your certificate and chain have been saved ...
Теперь ваш сайт доступен по HTTPS. Вы можете проверить это, открыв https://example.com в браузере.
Для Apache
Если вы используете Apache, команда будет немного отличаться:
sudo certbot --apache
Certbot также отсканирует ваши виртуальные хосты (<VirtualHost> блоки) и предложит настроить HTTPS для выбранных доменов. Выберите нужные и Certbot сделает всё за вас.
После завершения процесса вы снова увидите поздравительное сообщение и сможете проверить доступность вашего сайта через HTTPS.
4. Автоматическое обновление сертификатов
Сертификаты Let's Encrypt действительны только 90 дней, поэтому их нужно регулярно обновлять. Certbot может делать это автоматически, но нам нужно убедиться, что всё настроено правильно.
Проверка сроков действия сертификатов
Вы можете проверить, когда истекает срок действия вашего сертификата:
sudo certbot certificates
Вывод покажет ваши домены и дату истечения их сертификатов.
Настройка автоматического обновления
Во время установки Certbot автоматически добавляет задачу в Cron или Systemd Timer для проверки обновлений. Если вы хотите убедиться, что всё работает, добавьте тестовую задачу в Cron:
sudo crontab -e
Добавьте строку:
0 0 * * * certbot renew --quiet
Эта команда проверяет и продлевает сертификаты ежедневно в полночь. Ключ --quiet отключает вывод ненужной информации.
Ручное обновление
Если вы хотите обновить сертификаты вручную (например, для тестов), используйте:
sudo certbot renew
5. Включение автоматического перенаправления HTTP → HTTPS
Ваш сайт всё ещё может быть доступен по HTTP, но это небезопасно. Настроим автоматическое перенаправление всех запросов на HTTPS.
Для Nginx
Certbot может автоматически настроить перенаправление при выдаче сертификата. Если вы не включили это ранее, добавьте перенаправление вручную в ваш конфигурационный файл виртуального хоста:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Перезагрузите Nginx, чтобы применить изменения:
sudo systemctl restart nginx
Для Apache
Certbot также предлагает включить перенаправления автоматически. Если вы пропустили этот шаг, добавьте в ваш файл виртуального хоста:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Перезапустите Apache:
sudo systemctl restart apache2
6. Отладка ошибок
Если что-то пошло не так, начните с просмотра логов:
Для Nginx
sudo tail -f /var/log/nginx/error.log
Для Apache
sudo tail -f /var/log/apache2/error.log
Тестирование конфигурации
Также проверьте конфигурацию веб-сервера:
Для Nginx:
sudo nginx -tДля Apache:
sudo apachectl configtest
Проверка HTTPS
Убедитесь, что ваш сайт доступен по HTTPS:
curl -I https://example.com
Вы должны увидеть статус 200 OK и строку Strict-Transport-Security, что означает, что HTTPS работает.
Теперь вы готовы к созданию безопасных, защищённых HTTPS сайтов. Ваши пользователи будут довольны, Google — тоже, а вы сможете спать спокойно, зная, что ваши данные защищены от злодеев интернета.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ