В современных дистрибутивах установка веб-сервера довольно проста, поскольку случаи использования веб-сервера настолько распространены, что большинство, если не все дистрибутивы предоставляют пакеты в своих репозиториях. 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