Apache HTTP все еще является лидером на рынке веб-серверов среди миллиона самых нагруженных сайтов.
Очевидно, что показатели Nginx постепенно растут, поэтому, если вы администрируете систему/веб-сеть/связующее программное обеспечение, то вы должны одинаково хорошо знать веб-серверы Apache и Nginx.
Однако, в этой статье я рассмотрю только Apache Web Server.
После установки SSL-сертификата настроенный домен/IP будут доступны через HTTPS. Давайте приступим.
Мы сделаем следующее:
- скомпилируем Apache HTTP 2.4.5 с модулем SSL;
- получим SSL-сертификат;
- настроим Apache для поддержки SSL.
Установка Apache с SSL из исходника
Для настройки SSL Apache HTTP должен быть скомпилирован с mod_ssl. Я буду использовать виртуальную машину с CentOS 7 от DigitalOcean для демонстрации.
- войдем на сервер Linux с правами root и загрузим последнюю версию Apache
wget http://www-us.apache.org/dist//httpd/httpd-2.4.25.tar.gz .
- извлечем с помощью команды gunzip
gunzip -c httpd-2.4.25.tar.gz | tar xvf -
- у вас появится новая папка “httpd-2.4.25”
- войдите внутрь и выполните следующую команду конфигурации
./configure --enable-ssl –-enable-so
Примечание: Если вы делаете это на новом сервере, то можете столкнуться с некоторыми проблемами, связанными с APR, PCRE и OpenSSL и в этом случае можете обратиться к руководству по поиску и устранению неполадок.
Убедитесь, что вы не получили сообщения об ошибке после выполнения команды конфигурации и затем осуществите установку с помощью команды make.
make
make install
Убедитесь, что не допустили ошибок при выполнении команд. Итак, вы установили веб-сервер Apache с поддержкой SSL-сертификата.
Получение SSL-сертификата
Существует несколько способов генерации и получения SSL-сертификата, подписанного центром сертификации.
Если вы хотите установить SSL-сертификат для веб-сервера в локальной сети, то большинство организаций имеет собственные центры для выдачи сертификатов и вам нужно лишь связаться с ними.
Но вам все же необходим CSR (Certificate Signing Request), и вы можете сгенерировать его с помощью OpenSSL.
Однако, если вы ищете безопасный интернет адрес (URL), то можете купить сертификат у VeriSign, GoDaddy, Namecheap и других компаний или же получить бесплатный сертификат от Let's Encrypt.
Let’s Encrypt это проект Linux Foundation, позволяющий выпускать бесплатные SSL/TLS сетрификаты. Я буду использовать Let's Encrypt, чтобы получить сертификат для моего домена — Chandan.io.
Есть несколько способов сгенерировать CSR, но наиболее легкий из тех, что я обнаружил – использовать онлайн инструмент “SSL For FREE”.
Введите URL-адрес, который вы хотите защитить.
Подтвердите право собственности на домен одним из указанных методов и скачайте сертификат для вашего домена.
Вы получите три файла, которые в дальнейшем мы будем использовать для настройки веб-сервера Apache:
- key — это ваш файл с ключом, к которому никто посторонний не должен иметь доступ;
- certificate – действующий SSL-сертификат для вашего домена;
- ca_bundle – цепочка сертификатов (корневой и промежуточные).
Перенесите загруженные файлы на веб-сервер. Нам они скоро понадобятся.
Конфигурация Apache SSL
Последний шаг – настройка Apache таким образом, чтобы он мог обслуживать поступающие запросы через HTTPS:
- войдите на сервер Apache
- сделайте резервную копию файла httpd.conf (по умолчанию находится в /usr/local/apache2/conf/)
- откройте файл в текстовом редакторе (например, в vi) и убедитесь в том, что модуль mod_ssl и httpd-ssl.conf существуют и не закомментированы.
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
Мы будем использовать файл httpd-ssl.conf для настройки деталей сертификата. Далее – вы должны убедиться, что он имеет правильные параметры.
- SSLCertificateFile – путь к сертификату CRT, загруженному ранее
- SSLCertificateKeyFile – путь к файлу приватного ключа
- SSLCertificateChainFile – путь к файлу ca_bundle.crt
Совет: вы можете создать новую папку под названием «ssl» и сохранить в ней все файлы, связанные с сертификатом.
- Сделайте резервную копию, если требуется, и внесите следующие изменения.
SSLCertificateFile "/usr/local/apache2/conf/ssl/certificate.crt"
SSLCertificateChainFile "/usr/local/apache2/conf/ssl/ca_bundle.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/ssl/private.key" - Далее вам нужно настроить директиву «ServerName». Обычно, это имя вашего домена/URL-адрес.
ServerName chandan.io
- Сохраните файл и перезапустите веб-сервер Apache.
cd /usr/local/apache2/bin ./apachectl stop ./apachectl start
Наконец, вы должны убедиться, что ваш домен указывает на вновь настроенный IP-адрес веб-сервера. Затем попробуйте получить доступ к вашему домену с помощью https.
Как вы можете видеть, Chandan.io доступен через https при помощи сертификата, который я настроил.
Описанные шаги необходимы для установки SSL-сертификата, а вы можете настраивать SSL дальше для укрепления защиты так, как я объяснил это здесь.
Перед запуском я бы посоветовал протестировать SSL/TLS и убедиться, что он не подвержен распространенным уязвимостям.
Я надеюсь, что этот обзор даст вам представление о том, как реализовать SSL-сертификат на вашем веб-сервере Apache так, чтобы URL-адрес был доступен через HTTPS.
Если вы только начинаете осваивать веб-сервер Apache, я бы рекомендовал вам воспользоваться этим онлайн-курсом.
Заглядывайте на VPS.today — сайт для поиска виртуальных серверов. 1432 тарифов от 130 хостеров, удобный интерфейс и большое число критериев для поиска самого лучшего виртуального сервера.
Комментарии (10)
dmitrystas
16.09.2018 20:37+2Раз уж говорим об SSL, то неплохо было бы сразу рассказать и о http/2.
saipr
16.09.2018 20:43Или о Создании защищенных Web-сайтов/порталов на базе Apache и российской криптографии.
skymal4ik
16.09.2018 21:21+6Простите, но бесполезная статья. Те, кто ставит apache из исходников, сами разберутся с какими флагами его собирать. А кому не надо — из репозитория поставят скорее.
Не рассматривается let's encrypt. Не рассматривается настройка протоколов шифрования — например было бы интересно включить TLS1.3 и http2.
Ни слова про безопасность, отзыв сертификатов, pinning, заголовки(hsts) и т.д…
Посему статья малополезная и тонет среди тысяч таких же старых статей.
iig
16.09.2018 23:04+42 вопроса у меня…
Какая необходимость компилировать apache из исходников в этом Centos? Причем без centos-specific патчей.
Почему это нужно делать под root?
ALexhha
17.09.2018 00:11-1Спасибо К.О. за статью из 3х строчек настройки, но боюсь тебя ждут плохие новости — а теперь прогони свой сервер на том же ssllabs — www.ssllabs.com/ssltest и ты узнаешь много нового.
Или может это просто реклама сервиса в корпоративном блоге? Но просто рекламу не поймут, так что решили разбавить хоть чем то :)vesper-bot
17.09.2018 06:54SSLLabs по факту оценивают только openssl из веб-сервера, апач там нужен, чтобы сертификаты отдавать. И таки десятилетней давности апач под вин, но с обновленным openssl, вполне себе получает А на проверке.
ALexhha
17.09.2018 11:34SSLLabs по факту оценивают только openssl из веб-сервера
статья вроде как раз о настройке веб сервера и ssl, разве нет? Поэтому и проверять стоит именно их. Естественно, если у вас в системе при этом установлен старый bash с уязвимостью shockshell или старая версия ssh/ftp/etc, то ваша система будет уязвима, но ведьстатьязаметка совсем не об этом
mtp
17.09.2018 01:07Немного не в тему настройки Апача, но в тему вашего блога.
Для случая VDS/VPS под Windows Server у вас не отслеживается стоимость лицензирования Windows. У многих провайдеров она идет отдельным пунктом — плюс несколько сотен рублей в месяц, что существенно меняет картину для серверов начального уровня. Для сравнения, те же hosters.ru (не реклама, пример из топа поисковиков для иллюстрации) показывают стоимость лицензий винды в удобном виде.
lemproix
Как установить Apache и прикрутить к нему ssl, в самом Хабре было написано over9999.
Про "make install" вообще молчу
iig
Кстати, способ распаковки архива выглядит тоже необычно. Даже не могу представить, зачем такая конструкция может понадобиться. Разве что автор воспитывался
в джунгляхв системе, где tar собран без поддержки gzip.