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:

  1. key — это ваш файл с ключом, к которому никто посторонний не должен иметь доступ;
  2. certificate – действующий SSL-сертификат для вашего домена;
  3. 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 для настройки деталей сертификата. Далее – вы должны убедиться, что он имеет правильные параметры.

  1. SSLCertificateFile – путь к сертификату CRT, загруженному ранее
  2. SSLCertificateKeyFile – путь к файлу приватного ключа
  3. 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)


  1. lemproix
    16.09.2018 20:37
    +6

    Как установить Apache и прикрутить к нему ssl, в самом Хабре было написано over9999.
    Про "make install" вообще молчу


    1. iig
      17.09.2018 11:09

      Кстати, способ распаковки архива выглядит тоже необычно. Даже не могу представить, зачем такая конструкция может понадобиться. Разве что автор воспитывался в джунглях в системе, где tar собран без поддержки gzip.


  1. dmitrystas
    16.09.2018 20:37
    +2

    Раз уж говорим об SSL, то неплохо было бы сразу рассказать и о http/2.


    1. saipr
      16.09.2018 20:43

      Или о Создании защищенных Web-сайтов/порталов на базе Apache и российской криптографии.


  1. skymal4ik
    16.09.2018 21:21
    +6

    Простите, но бесполезная статья. Те, кто ставит apache из исходников, сами разберутся с какими флагами его собирать. А кому не надо — из репозитория поставят скорее.

    Не рассматривается let's encrypt. Не рассматривается настройка протоколов шифрования — например было бы интересно включить TLS1.3 и http2.
    Ни слова про безопасность, отзыв сертификатов, pinning, заголовки(hsts) и т.д…

    Посему статья малополезная и тонет среди тысяч таких же старых статей.


  1. iig
    16.09.2018 23:04
    +4

    2 вопроса у меня…
    Какая необходимость компилировать apache из исходников в этом Centos? Причем без centos-specific патчей.
    Почему это нужно делать под root?


  1. ALexhha
    17.09.2018 00:11
    -1

    Спасибо К.О. за статью из 3х строчек настройки, но боюсь тебя ждут плохие новости — а теперь прогони свой сервер на том же ssllabs — www.ssllabs.com/ssltest и ты узнаешь много нового.

    Или может это просто реклама сервиса в корпоративном блоге? Но просто рекламу не поймут, так что решили разбавить хоть чем то :)


    1. vesper-bot
      17.09.2018 06:54

      SSLLabs по факту оценивают только openssl из веб-сервера, апач там нужен, чтобы сертификаты отдавать. И таки десятилетней давности апач под вин, но с обновленным openssl, вполне себе получает А на проверке.


      1. ALexhha
        17.09.2018 11:34

        SSLLabs по факту оценивают только openssl из веб-сервера
        статья вроде как раз о настройке веб сервера и ssl, разве нет? Поэтому и проверять стоит именно их. Естественно, если у вас в системе при этом установлен старый bash с уязвимостью shockshell или старая версия ssh/ftp/etc, то ваша система будет уязвима, но ведь статья заметка совсем не об этом


  1. mtp
    17.09.2018 01:07

    Немного не в тему настройки Апача, но в тему вашего блога.

    Для случая VDS/VPS под Windows Server у вас не отслеживается стоимость лицензирования Windows. У многих провайдеров она идет отдельным пунктом — плюс несколько сотен рублей в месяц, что существенно меняет картину для серверов начального уровня. Для сравнения, те же hosters.ru (не реклама, пример из топа поисковиков для иллюстрации) показывают стоимость лицензий винды в удобном виде.