Установка Let's Encrypt
Прикладной протокол передачи данных HTTPS, в отличие от HTTP, поддерживает шифрование данных. HTTPS – это HTTP + криптографический протокол TLS, реже более старый SSL. В случае HTTPS данные идут через порт 443 транспортного протокола TCP, а не порт 80.
Чтобы веб-сервер мог отправлять и получать данные по HTTPS на нем должен быть установлен сертификат с открытым ключом. Сертификат устанавливается для конкретного сервера.
Когда клиент устанавливает соединение с сервером, он получает копию открытого ключа. Запросы клиента расшифровываются с помощью закрытого ключа.
Let's Encrypt – это центр сертификации, выдающий бесплатные криптографические сертификаты.
При выдаче к запросившему сертификат веб-серверу, производится ряд запросов для подтверждения факта владения доменом. При этом происходит опрос записей DNS домена из множества географических мест.
Таким образом, сертификат можно установить только тогда, когда доменное имя уже привязано к IP или серверным именам (NS) вашего VPS.
Запросить, установить, настроить и перевыпустить сертификат Let's Encrypt можно с помощью программы-клиента certbot. Сертификат получают для веб-сервера – Apache, Nginx и других.
Certbot не установлен в Ubuntu по умолчанию. Кроме того, из-за активной разработки, версия в официальном репозитории скорее всего будет устаревшей. На сайте разработчика certbot (https://certbot.eff.org/instructions) рекомендуется устанавливать его через pip (certbot написан на Python) или утилиту snapd, которую также может потребоваться установить.
# apt install snapd # apt remove certbot # snap install --classic certbot # ln -s /snap/bin/certbot /usr/bin/certbot
Команда
# certbot --apache -d younglinux.info -d www.younglinux.info
запускает certbot
с плагином --apache
, ключи -d
определяют имена доменов, для которых выпускается сертификат. Кроме этого, плагин --apache
берёт на себя настройку Apache и перезагрузку конфигурации.
При установке сертификата certbot проверяет, действительно ли домен делегируется на данный сервер.
Кроме этого, в /etc/apache2/sites-available/ в конфигурационном файле для HTTP (порт 80) прописывается редирект на HTTPS.
RewriteEngine on RewriteCond %{SERVER_NAME} =www.biology.su [OR] RewriteCond %{SERVER_NAME} =biology.su RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Если удалить его отсюда, то сайт должен стать доступным как по протоколу HTTPS, так и HTTP.
В случае успешного завершения процедуры будет выдано сообщение о местонахождении сертификата и ключа в файловой системе.

Сертификат Let's Encrypt надо обновлять каждые 90 дней. Программа certbot автоматизирует этот процесс, добавляя файл со скриптом обновления в /etc/cron.d/. Скрипт запускается раз в день и обновляет сертификаты, которые заканчиваются в ближайшие 30 дней.
Тест процесса обновления выполняется командой sudo certbot renew --dry-run
.
Без опции --dry-run
выполняется настоящее обновление сертификата.
При переносе сайта на новый сервер, выполняется команда выпуска, а не обновления сертификата.
Пример перенаправления на HTTPS в файле .htaccess корневого каталога сайта (если таковое требуется):
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Если сайт раньше был доступен по протоколу HTTPS, при попытке открыть его на HTTP браузер может перебрасывать на HTTPS из-за кэша. Поэтому при переносе сайта на новый хостинг для тестирования его работоспособности на протоколе HTTP может потребоваться открыть браузер в режиме инкогнито.