Полная инструкция по получению и настройке Веб-сервера с Let's Encrypt SSL для сайтов через Certbot.
Если на сайте не установлен или просрочен SSL-сертификат, посетители увидят сообщение в браузере, что сайт небезопасен. Такие сообщения заставляют с недоверием относится к ресурсу. HTTPS - это протокол для передачи данных между сайтом и компьютерами его посетителей. Данные, которые передаются по HTTPS шифруются. Google и Яндекс рекомендуют устанавливать SSL-сертификаты для любых сайтов, даже если это небольшой блог или сайт-визитка. Бесплатный SSL-сертификаты от Let's Encrypt подойдут для простых информационных сайтов, которые не собирает данные пользователей
Let’s Encrypt — некоммерческий доверенный центр сертификации. Он выдает SSL-сертификаты бесплатно. При этом процесс выпуска полностью автоматизирован. Большинству людей с доступом имеющие доступ к серверу по SSH рекомендуется использовать клиент Certbot. Он автоматизирует выпуск и установку сертификата без перерыва в работе.
В Debian все просто, Certbot представлен в официальном списке пакетов. Для проверки и наличия пакетов наберите комманду:
apt search Certbot
Далее для его установки достаточно выполнить одну простую команду:
apt install certbot
Также будут подтянуты необходимые python-зависимости.
Чтобы подтвердить установку, нажмите Y и Enter. Certbot установлен на сервер.
Так же понадобятся пакет: python3-certbot-apache
Apache является самым распространенным и популярным веб-сервером, актуальной версией является 2.4.x.
python3-certbot-apache - это плагин, который обеспечивает интеграцию Certbot и Apache, благодаря чему вы сможете автоматизировать получение сертификата и настройку HTTPS на вашем веб-сервере с помощью одной команды.
apt install python3-certbot-apache
Далее необходимо получить сертификат. Для генерации используется такая команда:
certbot certonly --apache -d messure.ru -d www.messure.ru
При первом запуске утилита предложит вам указать ваш Email адрес, для того чтобы отправлять вам уведомления о необходимости обновить сертификат и новости, а также попросит принять лицензионное соглашение. А потом спросит можно ли передать ваш адрес их партнёрам. Только после этого начнётся генерация сертификата.
Программа сообщает, что сертификат сохранён в папке /etc/letsencrypt/live/messure.ru/ и вы можете его использовать. Если вы просмотрите этот каталог, то увидите там четыре файла:
- cert.pem - файл сертификата, его необходимо прописать в параметре SSLCertificateFile;
- chain.pem - файл цепочки сертификата, обычно прописывается в параметре SSLCertificateChainFile;
- privkey.pem - приватный ключ сертификата, должен быть прописан в SSLCertificateKeyFile;
- fullchain.pem - в нём объединено содержимое cert.pem и chain.pem, можно использовать вместо этих обоих файлов.
Сертификат получен, можно переходить к настройке виртуального хоста для работы сайта по защищенному протоколу.
Для обычного сайта у нас хост в настройках веб сервера Apache существует. Теперь необходимо создать хост для SSL версии. Например:
nano /etc/apache2/sites-available/messure.ru.ssl.conf
Этой конфигурации достаточно чтобы всё заработало. Обратите внимание на порт 443.
Тут кроме стандартных настроек надо добавить новые 4 параметра:
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/messure.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/messure.ru/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/messure.ru/chain.pem
Далее включаем новый хост на сервере Apache командой:
a2ensite messure.ru.ssl.conf
И не забудьте включить модуль для поддержки SSL:
a2enmod ssl
Также советую изменить имена файлов логов:
ErrorLog ${APACHE_LOG_DIR}/messure.ru.ssl.error.log
CustomLog ${APACHE_LOG_DIR}/messure.ru.ssl.access.log combined
После всех этих манипуляций мне только оставалось настроить редирект (Moved Permanently) с http на https и перезагрузить веб-сервер.
nano /var/www/messure.ru.conf
После правки файла настроек хоста перезапускаем веб-сервер:
systemctl restart apache2
Далее не забыть открыть порт 443 на роутере и при необходимости в фаирволе.
Для получения конфигурации набора шифров SSL / TLS определяющих параметры соединения HTTPS можно воспользоваться сервисом:
>> Mozilla SSL Configuration Generator
Сервис предлагает несколько вариантов настроек, оптимальным является использование опции Intermediate.
Здесь ниже мы увидим предлагаемые настройки файла хоста и набор алгоритмов шифрования, сгруппированных в набор шифров «Cipher Suite».
Задаем доступные к использованию шифры которые предлагают специалисты Mozilla. Создание набора шифров - это сложная задача, которая подбирается для каждого Веб-сервера администратором самостоятельно. В данном примере используем те что перечислены в конфигураторе.
Чтобы добавить больше безопасности Конфигуратор предлагает какие устаревшие протоколы SSL следует отключить SSLv2 и SSLv3, а также TLS ниже 1.2.
TLS v1.2 или TLS v1.3 должны быть вашим основным протоколом, поскольку эти версии предлагают современное аутентифицированное шифрование (также известное как AEAD).
Строка вот такого вида:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
и далее видим:
SSLHonorCipherOrder off
SSLSessionTickets off
Первая строка определяет приоритет при выборе шифра, включенная опция отдает приоритет серверу, выключенная - браузеру клиента. В целях совместимости следует отдавать приоритет выбору клиента, а выбор сервера использовать только тогда, когда требуется принудительно использовать максимально стойкое шифрование. Вторая отключает использование сессионных билетов SSL, что требуется для обеспечения режима совершенной прямой секретности.
nano /etc/apache2/sites-available/messure.ru.ssl.conf
Перезапустил Apache:
systemctl restart apache2
Далее можно добавить новый тип DNS-записи у регистратора вашего доменного имени. DNS CAA - это стандарт, который позволяет владельцам доменных имен ограничивать, какие центры сертификации могут выдавать сертификаты для своих доменов. В сентябре 2017 года CA/Browser Forum обязал поддержку CAA в рамках своих базовых требований к стандарту выдачи сертификатов. При наличии CAA поверхность атаки для мошеннических сертификатов уменьшается, что фактически делает сайты более безопасными. Если центры сертификации имеют автоматизированный процесс выдачи сертификатов, то они должны проверять наличие записи DNS CAA, поскольку это уменьшит неправильную выдачу сертификатов.
Рекомендуется внести центры сертификации Lets Ecrypt в белый список, добавив запись CAA для сертификата.
В личном кабинете регистратора вашего домена выполните:
Выбираете ваш домен --> Управление зоной --> Добавить запись
Можно так же пройти процедуру верификации домена. Для этого через личный кабинет у регистратора домена в соответствующем пункте можно отправить документы для подтверждения своей личности. Требуется отсканировать некоторые страницы паспорта и загрузить их в личный кабинет.
Официальный WHOIS сервис для получения информация о домене:
Для проверки работы сайта на протоколе HTTPS воспользуйтесь следующим сервисом по ссылке:
Тест SSL-сервера от Qualy's SSL Labs - это простой способ определить, насколько безопасна ваша настройка SSL. В этой статье по примеру выше сайт получил рейтинг A.
Некоторые правила повышают оценку до A+, чтобы вознаграждать исключительные конфигурации.
Для большинства веб-сайтов достаточно безопасности, обеспечиваемой 2048-битными ключами RSA. Алгоритм открытого ключа RSA широко поддерживается, что делает ключи этого типа безопасным выбором по умолчанию. Для большинства веб-сайтов использование ключей RSA более 2048 бит и ключей ECDSA более 256 бит является пустой тратой мощности процессора и может ухудшить пользовательский опыт.
Однако для получения более высокой оценки необходимо настроить другие механизмы и подобрать конфигурацию со своими шифрами.
HSTS (HTTP Strict Transport Security) — механизм, принудительно активирующий защищённое соединение через протокол HTTPS. Данная политика безопасности позволяет сразу же устанавливать безопасное соединение через HTTPS-протокол даже если сайт был запрошен через http.
Механизм использует особый заголовок HTTP Strict-Transport-Security, для переключения пользователя, зашедшего по HTTP, на HTTPS-сервер.
Для того что бы включить HSTS для веб-сервера Apache необходимо добавить соответствующий модуль заголовков и сделать запись в хост вашего сайта.
Включите модуль заголовков для Apache командой:
a2enmod headers
Теперь откройте хост файл вашего сайта и добавьте заголовок следующего вида:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains ;preload"
- max-age - срок действия (1 год) количество времени в секундах
- includeSubdomains - распространять замену http:// на https:// для всех поддоменов
- preload - дает разрешение на внесение сайта в список предварительной загрузки
Далее сохраняем файл настроек хоста и перезапускаем Apache.
systemctl restart apache2
Перейти на hstspreload.org и отправить URL вашего домена в соответствующую форму.
А так же можно выполнить команду в терминале вашего сервера:
curl -I https://messure.ru
Следующий механизм который понадобиться это OCSP Stapling и OCSP Must-Staple.
OCSP (Online Certificate Status Protocol) - протокол статуса онлайн-сертификата. Метод OCSP Stapling помогает быстро и безопасно установить достоверность SSL-сертификата. OCSP - это запрос о статусе одного конкретного сертификата в Центр Сертификации на проверку списка отозванных сертификатов. OCSP Stapling позволяет браузеру выполнить проверку статуса онлайн-сертификата, получив ответ статуса онлайн-сертификата вместе с сертификатом. Это называется Stapling (буквально — Сшивание). Сшивание OCSP позволяет веб-серверам вместо браузеров получать подписанные ответы OCSP для своих сертификатов.
Добавьте следующие строчки в настройки файла хоста для работы OCSP Stapling:
#OCSP Stapling, only in httpd 2.3.3 and later
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
Механизм OCSP Must-Staple избавляет клиента от необходимости выполнять этот внешний запрос. Хост-сайт сам делает запрос и передаёт браузеру клиента тем самым перекладывает нагрузку на себя.
OCSP Must-Staple это всего лишь флаг, который устанавливается центром сертификации в сертификате при его выдаче, и этот флаг указывает браузеру, что сертификат обязательно будет передан с сервера в комплекте с ответом статуса онлайн-сертификата, в противном случае должен быть отклонен.
Генерируем новый сертификат с новыми флагами --must-staple
certbot renew --force-renewal --apache --must-staple --rsa-key-size 2048
В случае компрометации и получения злоумышленником нашего ключа, для его использования ему также придется настроить работу OCSP Staple. Если злоумышленник не настроит поддержку OCSP Staple, браузер отклонит сертификат (потому что флаг OCSP Must-Staple в сертификате предпишет это сделать), а если всё же настроит OCSP Staple, то в ответе OCSP будет указано, что сертификат отозван, и браузер отклонит его.
Далее меняю цепочку шифров для поддержки старых браузеров, возможно вам эта настройка не подойдёт.
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES:!CAMELLIA:!AES128
SSLHonorCipherOrder on
SSLSessionTickets off
SSLOpenSSLConfCmd Curves secp521r1:secp384r1:prime256v1
Для проверки работы сайта с новыми настройками снова воспользуйтесь следующим сервисом по ссылке:
Как видим, настроить веб-сервер Apache для работы по HTTPS совсем несложно. А Let's Encrypt обеспечит бесплатное получение и обновление сертификатов.
Так же ссылка на сервис по аудиту сайта PageSpeed Insights