Использование безопасной веб-коммуникации: Wildcard HTTPS с Let's Encrypt и Nginx

Использование безопасной веб-коммуникации: Wildcard HTTPS с Let's Encrypt и Nginx

06.12.2023
Автор: HostZealot Team
2 мин.
347

Безопасная веб-коммуникация очень важна для нормального функционирования вашего сервера.

Множество различных подходов обеспечивают шифрование и, следовательно, защиту деятельности вашего сервера. Разумеется, для повышения надежности веб-связи рекомендуется использовать различные меры безопасности в комбинации.

В этой статье мы рассмотрим различные методы защиты, а также способы их включения и комбинирования на вашем сервере.

Настройка правил брандмауэра для HTTP/S

Брандмауэр - это программное обеспечение, обуславливающее безопасность ОС путем регулирования доступа и фильтрации информации, поступающей из Интернета. С помощью брандмауэра вы разрешаете или блокируете трафик или определенные типы трафика.

Разрешая HTTP/S-трафик, вы даете брандмауэру указание включить шифрование данных из Интернета через HTTPS. Если вы задаете конфигурацию трафика HTTP/S, вы разрешаете доступ к сайтам, использующим указанные протоколы, в некоторых разделах сайта или всему сайту, работающему на HTTP/S.

Например, правила брандмауэра в CentOS 7 и их настройки по умолчанию не разрешают доступ к протоколам HTTP/S. Даже при использовании клиента Let's Encrypt доступ будет разрешен только при изменении конфигурации правил брандмауэра.

Чтобы изменить конфигурацию правил брандмауэра по умолчанию и разрешить трафик HTTP/S, вам потребуется следующее:

  • Облачный сервер с RHEL 7 или CentOS 7, поддерживающий брандмауэр
  • Доступ к вашему серверу
  • Базовое понимание SSH

Сначала войдите на свой сервер через SSH и убедитесь, что брандмауэр поддерживается, используя команду "systemctl status firewalld".

Далее выполните следующую команду для HTTP:

sudo firewall-cmd --permanent --zone=public --add-service=http

Команду для HTTPS:

sudo firewall-cmd --permanent --zone=public --add-service=https

Перезагрузите брандмауэр для сохранения изменений с помощью команды:

sudo firewall-cmd --reload

После выполнения этих шагов ваш сервер будет иметь необходимую конфигурацию для просмотра HTTP и HTTPS версий вашего сайта. После завершения настройки брандмауэра можно установить сертификаты.

Управление продлением сертификатов

Вы можете воспользоваться сертификатами wildcard, если управляете несколькими доменами (хостами) на своем сервере. Сертификаты Wildcard - это SSL-сертификаты, обеспечивающие безопасность нескольких хостов. Управление несколькими хостами на сервере с помощью сертификатов wildcard поможет вам сэкономить время и деньги.

В целом Let's Encrypt может автоматически устанавливать необходимые сертификаты и запускать веб-сервисы в соответствии с ними. Если у вас уже есть клиент Let's Encrypt - отлично! Если же нет, то перед установкой клиента Let's Encrypt необходимо установить клиенты Nginx и Certbot. Для генерации сертификатов для вашего сервера вам также потребуется имя домена и DNS-провайдер, поддерживающий клиент Certbot.

После установки клиента Certbot можно приступать к генерации сертификатов.

Следует помнить, что для получения сертификатов wildcard клиент Let's Encrypt требует подтверждения от DNS.

Для получения сертификатов wildcard используется следующая команда:

sudo certbot certonly --manual --preferred-challenges=dns --email xyz@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d example.com -d .example.com

Где:

  • certonly - запрос сертификатов
  • manual - получение сертификатов
  • preferred-challenges=dns - авторизация через DNS
  • server - сервер, используемый для генерации сертификатов
  • agree-tos - согласие с условиями и положениями
  • d - домен (или хост), для которого генерируются сертификаты

Некоторые сертификаты имеют срок действия. Поэтому, когда срок активного сертификата заканчивается, можно продлить срок действия сертификатов.

Проверить, сработает ли обновление на текущих (активных) сертификатах, можно, сымитировав истечение их срока с помощью следующей команды в Certbot:

sudo certbot renew --dry-run

Для обновления сертификатов в Certbot используйте следующую команду:

sudo certbot renew

После этого перезагрузите веб-сервис для получения обновленных сертификатов, используя:

sudo nginx -s reload

Если вы хотите сделать этот процесс автоматическим, то это можно сделать с помощью приведенного ниже скрипта.

sudo vi /etc/cron.daily/letsencrypt-renew
#!/bin/sh
if certbot renew > /var/log/letsencrypt/renew.log 2>&1 ; потом
nginx -s reload
fi
exit
sudo chmod +x /etc/cron.daily/letsencrypt-renew

Скрипт обновляет сертификаты и направляет результаты в лог-файл; при успешном обновлении сценарий выполняет перезагрузку клиента Nginx для применения изменений.

После завершения процесса можно автоматизировать работу скрипта с помощью Crontab, открыв crontab корневого пользователя и используя приведенную ниже команду редактирования:

sudo Crontab -e

Для автоматизации введите в окно crontab следующую команду:

01 02,14 * * * /etc/cron.daily/letsencrypt-renew,

Где время обновления скрипта - 02:01 и 14:01, то есть скрипт обновляется дважды в день. Вы можете установить наиболее удобное для вас время.

Затем сохраните изменения.

Отмена сертификатов для повышения безопасности

Чтобы удалить SSL-сертификаты с сервера, выполните следующую команду с именем вашего домена (или хоста):

sudo certbot revoke --cert-path /etc/letsencrypt/live/domain_name/cert.pem

После выполнения этой команды вы не получите никаких уведомлений об изменениях в сертификатах. Тем не менее, вы можете повторно выполнить команду, и если она сообщит, что сертификат уже отменен, это будет означать, что процесс успешно завершен.

Усиление мер веб-безопасности

При получении или обновлении сертификатов проверьте клиент Nginx на предмет дальнейшей настройки HTTPS.

Использование только защищенных протоколов

Не все протоколы безопасности разработаны одинаково, и некоторые из них менее безопасны, чем другие. Например, сертификаты SSLv2 и SSLv3 отстают по уровню безопасности от сертификатов TLS. Считается, что SSL-сертификаты имеют врожденные недостатки с точки зрения протоколов безопасности. Поэтому возникла необходимость заменить их более совершенными протоколами. Для SSL это - TLSv1.1 и TLSv1.2.

Однако даже в случае сертификатов TLS лучше использовать более новые сертификаты, хотя некоторые браузеры все равно будут требовать старые версии.

Активация строгой транспортной безопасности HTTP (HSTS)

Strict Transport Security защищает сертификаты TLS, обеспечивая безопасную связь с использующими их сайтами. Таким образом, даже при наличии проблем с настройкой или реализацией HSTS обеспечит достаточную безопасность сертификатов, делая любые ссылки безопасными. Кроме того, он будет уведомлять пользователей об атаках, отключая встроенную в сертификаты функцию предупреждения о переходе по ссылке.

Включить HTST можно с помощью следующей команды:

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

Усовершенствование наборов шрифтов для шифрования

Задача наборов шифров состоит в том, чтобы оценить, насколько безопасен обмен данными между веб-сервером и клиентами посетителей.

Ниже приведен пример, созданный для ключей RSA и ECDSA:

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA: ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256

В итоге клиент указывает используемые им наборы шрифтов и предоставляет серверам возможность их выбора. Клиент расставляет шифры на сервере в порядке убывания, от наиболее защищенного к наименее защищенному. Для включения этой функции можно использовать следующую команду:

ssl_prefer_server_ciphers on;

Обратите внимание, что эта функция работает с протоколами SSL, а именно с SSLv3 и более новыми.

Реализация эфемерного алгоритма Диффи-Хеллмана

Алгоритм Диффи-Хеллмана - это протокол, в котором происходит обмен ключами между двумя сторонами для создания взаимного секрета, который не может быть обнаружен за пределами двухсторонней связи. По сути, такой алгоритм - это способ шифрования, который предписывает двум сторонам использовать открытый ключ для шифрования или дешифрования данных, которыми они обмениваются. Проще говоря, секретная информация смешивается с общедоступной, так что обнаружить секретную информацию становится невозможно. Это полезный метод, позволяющий установить общий ключ между сервером и клиентом и использовать его для шифрования данных, которыми они обмениваются.

Статический DH протокол отличается от эфемерного алгоритма тем, что последний генерирует временный ключ для каждого взаимодействия без его повторения. Таким образом, эфемерный алгоритм Диффи-Хеллмана обеспечивает долговременную безопасность, поскольку временный ключ не может быть рассекречен, как и защищенные им данные.

Использовать алгоритм Диффи-Хеллмана можно с помощью следующей команды:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Полученный результат можно использовать в конфигурации Nginx, например, так:

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Автоматическое перенаправление незашифрованных соединений

Полезным способом обеспечения безопасного веб-общения является перенаправление незашифрованных HTTP-соединений на зашифрованные HTTPS. Это можно сделать с помощью следующей команды:

server {
listen 80;
имя_сервера_имя_домена;
return 301 https://$server_name$request_uri;
}

С помощью такой команды вы создаете только сегмент HTTP, чтобы ваш веб-сервер мог заметить его и обновить HTTP-соединение до HTTPS. Таким образом, даже если в ссылке используется "http:", она будет преобразована в "https:".

Интеграция всех мер безопасности в конфигурацию

Несмотря на то что при использовании CentOS клиент Certbot сохраняет конфигурацию Nginx, редактирование конфигурации клиента Nginx вручную предотвратит обновление этого файла в будущем. Для этого создайте новый файл Nginx с помощью следующей команды:

sudo vi /etc/nginx/conf.d/domain_name.conf

С помощью этой команды вы создадите отдельный файл Nginx, который будет блокировать HTTPS-соединения с использованием всех мер безопасности, упомянутых ранее.

Чтобы добавить меры безопасности, продублируйте в Nginx следующий пример:

# HTTPS server
server {.
listen 443 ssl;
server_name domain_name;
ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA: ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
#HTTP redirect
server {
listen 80;
имя_сервера_имя_домена;
return 301 https://$server_name$request_uri;
}

Убедитесь, что вы сохранили файл в Nginx, а затем перезагрузите Nginx следующей командой:

sudo systemctl restart nginx

Теперь вы можете открыть свой сайт в браузере по адресу https://domain_name (имя вашего домена). Если он загрузится, это будет означать, что установка прошла успешно.

Если вы хотите дополнительно проверить, насколько хорошо работает серверное шифрование в браузере, воспользуйтесь тестом Qualys SSL Labs. Введите имя своего домена (хоста) на их сайте и нажмите кнопку Submit. Тест предоставит информацию о различных аспектах шифрования вашего сервера.

# VPS Поделиться:
Статьи по Теме