Показать статистику
0 голосов
от (1.8тыс. баллов)
388 просмотров 1 ответов

1 Ответ

0 голосов
от (19.1тыс. баллов)

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

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

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

Возможность использовать шифрование во время просмотра в течение долгого времени встроена во все основные современные браузеры, и аналогичным образом шифрование доступно веб-серверам уже много лет.

Установите веб-сервер Apache с поддержкой SSL / TLS

Для установки необходимых пакетов просто запустите от имени пользователя root:

# yum install httpd mod_ssl -y

Если на сервере уже установлен httpd, вам нужно только установить mod_ssl, все необходимые настройки выполняются установщиком. Обратите внимание, что в этом случае вам нужно перезапустить httpd, чтобы он мог загрузить модуль ssl. Используя пакеты, поставляемые с дистрибутивом, мы можем значительно упростить нашу жизнь, поскольку Red Hat будет предоставлять должным образом протестированные обновления как для операционной системы, так и для веб-сервера, конечно, вам нужна подписка для получения обновлений - но обновления необходимы для операционной системы в любом случае, чтобы оставаться в курсе.

Включить и запустить httpd сервер

Используя systemd, вы можете включить и запустить веб-сервер с помощью следующей команды:

# systemctl enable httpd && systemctl start httpd

Таким образом, служба httpd будет автоматически запускаться systemd при каждой загрузке.

Проверьте установку и статус

Вы можете проверить состояние веб-сервера, используя systemd:

# systemctl status httpd -l

Чтобы проверить, что mod_ssl правильно установлен:

# rpm -q mod_ssl 
mod_ssl-2.4.6-80.el7.x86_64

И загружается как модуль в httpd сервер:

# apachectl -M | grep ssl 
ssl_module (shared)

Использование сертификата

Когда мы устанавливаем пакет mod_ssl, модуль добавляет себя на сервер httpd, поэтому он загружает его при следующем запуске. По умолчанию создается самозаверяющий сертификат, который используется для установления зашифрованного соединения с браузером. Откройте браузер и укажите его на сервере через https:

Когда увидите сообщение об ошибке SSL в браузере Firefox

Давайте пока проигнорируем это, добавим исключение безопасности (не устанавливайте «постоянно хранить это исключение») и продолжим. Появится Домашняя страница по умолчанию веб-сервера httpd, установленного в Red Hat Linux

Обратите внимание на восклицательный знак рядом с URL (другие браузеры могут показывать разные предупреждения). 

Наш веб-сервер теперь работает и работает по протоколу https с самозаверяющим сертификатом и готов к обслуживанию контента, опубликованного /var/www/html в корневом каталоге контента по умолчанию веб-сервера в Red Hat. 

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

Тот факт, что наш браузер не может идентифицировать сертификат сервера как действительный, не мешает ему использовать зашифрованную связь с сервером, если мы явно решим, что доверяем этому сертификату. Это может подойти для небольшой (домашней) системы, где у вас есть только несколько пользователей, а также только несколько веб-серверов.

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

Чтобы узнать, когда истечет срок действия самоподписанного (или любого другого) сертификата, мы должны найти его в файловой системе, обратившись к файлу конфигурации модуля ssl:

# grep SSLCertificateFile /etc/httpd/conf.d/ssl.conf | grep -v "#" SSLCertificateFile /etc/pki/tls/certs/localhost.crt

А затем используйте openssl, чтобы получить дату истечения срока действия:

# openssl x509 -enddate -noout -in /etc/pki/tls/certs/localhost.crt 

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

Чтобы использовать полученный сертификат вместо значения по умолчанию, указанные ниже параметры должны указывать на файл сертификата, ключ сертификата и сертификат центра сертификации, подписавшего сертификат SSL, соответственно. Файлы должны быть скопированы на веб-сервер и должны быть доступны для чтения пользователю операционной системы, работающему с веб-сервером, - в случае установки Red Hat по умолчанию - пользователю apache. Эти параметры можно найти в  ssl.conf.

SSLCertificateFile    /etc/httpd/custom-cert/server-ssl.crt
SSLCertificateKeyFile    /etc/httpd/custom-cert/server-ssl.key
SSLCACertificateFile    /etc/httpd/custom-cert/ca.crt
от (19.1тыс. баллов)
0

Продолжаем...

Перенаправление http-трафика на https

Теперь, когда мы работаем по протоколу https, мы можем обеспечить использование https при обслуживании всего или части нашего контента. В нашем примере мы очень безопасны и используем http только для перенаправления входящих клиентов на https. 

Может возникнуть вопрос: если мы хотим использовать только https, почему мы вообще слушаем http? Предположим, что конечный пользователь только что услышал о нашем сайте и получил URL от друга, не содержащего протокол. На сегодняшний день большинство браузеров по умолчанию используют протокол http, если он не указан явно. Если мы перестанем обслуживать по протоколу http, пользователь, введя URL-адрес без https, получит сообщение об ошибке, если его браузер попытается связаться с нашим сервером через http. 

Чтобы перенаправить все входящие http-запросы на https, мы создаем файл /etc/httpd/conf.dс описательным именем, скажем, redirect_http.conf со следующим содержанием (где web.foobar.com - это DNS-имя сайта):


<VirtualHost _default_:80>
        Servername web.foobar.com
        Redirect permanent / https://web.foobar.com/
</VirtualHost>

И перезапустите веб-сервер. Мы можем проверить, правильно ли работает перенаправление из командной строки с помощью wget (с хоста, который доверяет SSL-сертификату веб-сервера):

$ wget http://web.foobar.com/

Видим примерно следующее

Выходные данные показывают ответ http 301, и мы можем видеть, как наш клиент wget выполняет перенаправление для подключения по протоколу https. По умолчанию трафик ssl регистрируется в разных лог-файлах,в отличии от трафика http. Мы можем найти указанный выше запрос в системе 

/var/log/httpd/ssl_access_log:

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

...