Меню

apache httpd conf настройка ssl

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

Настраиваем Apache для работы по HTTPS (SSL) с сертификатами Let’s Encrypt

Сегодня защищенное соединение перестало быть уделом сайтов, работающих с пользовательскими данными, а стало насущной необходимостью для всех, даже если у вас простой блог о личном увлечении. Большинство современных браузеров при заходе на простой HTTP-сайт уже указывают в адресной строке, что подключение не защищено, но в скором будущем начнут помечать такие сайты как небезопасные. Тем более что с приходом Let’s Encrypt шифрование стало доступно каждому и настроить его несложно, о чем мы и расскажем в данной статье.

Начнем мы с наиболее популярного веб-сервера Apache, первоначальная настройка которого выполнена по нашей статье: Настраиваем веб-сервер на базе Apache в Debian / Ubuntu Server. В данной статье будет использоваться Apache 2.4 установленный в среде Debian 10, но все сказанное ниже будет справедливо для любого основанного на Debian или Ubuntu дистрибутива, а с некоторыми поправками — для любой Linux системы.

Будем считать, что у нас уже настроен как минимум один виртуальный хост, на котором работает сайт, допустим, example.com, минимальная конфигурация виртуального хоста должна выглядеть примерно так:

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

Прежде всего нам потребуется настроить веб-сервер для работы с Let’s Encrypt, сделав так, чтобы сертификаты можно было легко получать для любого обслуживаемого сервером сайта без дополнительных настроек. Создадим для этого специальную директорию:

И сделаем ее владельцем веб сервер:

Затем создадим файл конфигурации для Аpache:

и внесем в него следующий текст:

Эта настройка будет перенаправлять все запросы к /.well-known/acme-challenge любого сайта в созданную нами директорию /var/www/letsencrypt.

Подключим конфигурационный файл:

и проверим конфигурацию на ошибки:

Затем перезапустим веб-сервер

Следующим шагом установим certbot, в современных дистрибутивах он включен в репозитории, поэтому достаточно выполнить:

Если вы используете более старые дистрибутивы, то обратитесь к нашей статье: Получаем сертификаты Let’s Encrypt при помощи Certbot

Пакет не требует начальной настройки и готов к работе сразу после установки. Перед тем, как получать сертификат, убедитесь, что к вашему серверу есть доступ из интернета. В любом случае советуем сначала выполнить пробное получение:

За тестовый режим отвечает ключ —dry-run, ключ —webroot указывает используемый плагин, в нашем случае отвечающий за работу с уже имеющемся веб-сервером. Опция -w указывает корневую директорию для Let’s Encrypt, которую мы создали и настроили ранее, а через ключи -d перечисляются домены и поддомены, для которых требуется получить сертификат. Если все прошло успешно вы получите лаконичное сообщение:

После того, как тест прошел успешно можно выполнить настоящее получение сертификатов, для этого просто уберите ключ —dry-run из команды.

Читайте также:  настройка firewall для ntp

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

Все полученные сертификаты, точнее символические ссылки на них, хранятся в /etc/letsencrypt/live в директориях с именами доменов. Настройки продления можно найти в /etc/letsencrypt/renewal, откроем настройку нашего домена /etc/letsencrypt/renewal/example.com.conf и внесем в секцию [renewalparams] следующую опцию:

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

Сертификат получен, можно переходить к настройке виртуального хоста для работы сайта по защищенному протоколу, рекомендуем скопировать текущий файл конфигурации и вносить настройки в него:

Затем откроем его и сразу изменим порт с 80 на 443:

Также советуем изменить имена файлов логов:

Эти опции включают SSL и указывают пути к сертификатам. В теории этого достаточно, но в современных условиях такие настройки не будут надежными, так как разрешают использование устаревших протоколов и нестойких шифров. Для получения современной и актуальной конфигурации SSL мы советуем воспользоваться сервисом moz://a SSL Configuration Generator, который предлагает несколько вариантов настроек, оптимальным является использование опции Intermediate.

Но не следует добавлять сразу все опции, ряд из них могут иметь достаточно «неожиданное» действие на неподготовленного пользователя. Поэтому сначала разберемся с шифрами и протоколами:

Первая опция отключает устаревшие и небезопасные протоколы SSLv3, TLS 1.0 и TLS 1.1, вторая задает доступные к использованию шифры. Создание набора шифров — это наиболее сложная задача, поэтому лучше довериться специалистам Mozilla, нежели изобретать велосипед самостоятельно.

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

Также разрешим использование протокола HTTP/2, если это возможно:

Сохраним файл конфигурации и подключим его:

Также нам потребуется модуль SSL:

Проверим конфигурацию и перезапустим веб-сервер:

После чего откройте сайт, явно указав протокол https://example.com

На этом этапе вы можете столкнуться с проблемой смешанного содержимого, когда определенные ресурсы сайта, например, изображения или скрипты загружаются по незащищенному протоколу HTTP. Если к первым браузеры относятся относительно лояльно, просто убирая «замочек» в адресной строке, то вторые по умолчанию блокируются. Поэтому внимательно изучите код вашего сайта и замените везде, где это возможно, получение ресурсов на защищенный протокол HTTPS. Если это невозможно, то от таких ресурсов следует отказаться.

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

Читайте также:  как сбросить настройки ubiquiti airgrid

Для этого добавим в конфигурацию виртуального хоста строку:

Также включим механизм OCSP Stapling, который позволяет ускорить проверку сертификата клиентом, что особенно важно для мобильных пользователей. Добавим строку:

Однако этого недостаточно, сохраним настройки виртуального хоста и снова откроем файл /etc/apache2/conf-available/le.conf, куда добавим:

Для работы вышеперечисленных опций нам потребуется модуль Headers:

Снова проверяем конфигурацию и перезапускаем сервер:

Самое время проверить HSTS в действии: перейдите на сайт по защищенному протоколу, а затем попробуйте открыть его HTTP версию, если HSTS работает, то у вас это не получится.

И в завершение настроим перенаправление клиентов с HTTP версии сайта на HTTPS, для этого откроем настройки виртуального хоста HTTP версии /etc/apache2/sites-available/example.com.conf и удалим из него все строки кроме:

Сохраним файл конфигурации и подключим модуль Rewrite:

И еще раз перезапустим сервер, не забыв проверить конфигурацию:

Теперь наш сервер настроен с учетом всех современных методик, проверить это можно на сайте SSL Labs, с текущими настройками была получена высшая оценка A+:

Как видим, настроить веб-сервер Apache для работы по HTTPS совсем несложно. А Let’s Encrypt обеспечит бесплатное получение и обновление сертификатов в автоматическом режиме. Если вы заметили, то мы ничего не писали про настройку автообновления, Certbot все уже сделал за нас.

источник

Настройка ssl в apache на CentOS

Хочу поделиться небольшой информацией о том, как настроить ssl подключение в apache на сервере с CentOS и перевести сайты с http на https. Делается это не сложно, но есть пара нюансов.

Недавно я уже рассказывал о том как получить бесплатный ssl сертификат для подтверждения доменного имени. Мы его использовали для организации ssl/tls соединений в почтовом сервере. Теперь его же мы будем использовать для того, чтобы перевести наш сайт на работу по ssl протоколу.

О том, как получить бесплатный сертификат от let’s encrypt и настроить apache на работу с ним читайте в моей статье по настройке web сервера apache на centos 8.

Установка mod_ssl в apache

В качестве сервера у нас выступает apache на CentOS, хотя это не принципиально, настройка на других linux дистрибутивах будет идентичной. Рабочим web сервером является apache. Использовать ssl протокол в apache мы будем с помощью мода mod_ssl. Первым делом проверим, установлен ли он:

Если нет, то устанавливаем:

После установки мода, идем в директорию /etc/httpd/conf.d и правим там файл настроек ssl.conf. Прописываем пути к сертификатами в директивах SSLCertificateFile и SSLCertificateKeyFile.

Создание виртуального хоста с поддержкой ssl

Далее необходимо либо создать новый виртуальный хост apache, либо отредактировать существующий в файле /etc/httpd/conf/httpd.conf. Добавляем в конец файла:

Читайте также:  установка windows 10 с нуля на компьютер

После сохранения проверяем конфигурацию apache:

Если появляется предупреждение:

То ищем в /etc/httpd/conf/httpd.conf строчку NameVirtualHost *:80 и добавляем после нее NameVirtualHost *:443

Снова проверяем. Если ошибок нет, перезапускаем апач и заходим на сайт, прописав в адресной строке https, вместо http. Теперь ваш сайт доступен по протоколу https. Но пользователи сайта могут об этом не знать. Было бы разумным сделать переадресацию с открытого протокола на защищенный. Сделаем это.

Переадресация с http на https

Для того, чтобы сделать автоматическую переадресацию с http на https, необходимо в описании виртуального хоста в httpd.conf добавить порт 80 вместе с 443:

И в корне сайта с помощью .htaccess и mod_rewrite делаем перенаправление всех запросов с http на https:

Теперь даже если просто набрать адрес сайта с http откроется его защищенная версия https. Не забудьте проверить, включен ли у вас модуль mod_rewrite в настройках apache. И проверьте фаервол. Для корректной работы сайта по протоколу https необходимо открыть 443 порт на веб сервере.

Онлайн курс по Linux

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

15 комментариев

Здравствуйте не подскажите можно ли получить сертификат lets encrypt если например будет два сервера с внешними ip и при этом один плавающий будет на два сервера, доменное имя к нему будет прикручено к плавающему ip?

Можно. Сервер же клиентам все равно будет отвечать с какого-то ip. Let’s encrypt во время выпуск сертификата делает проверку обычным запросом на web сервер.

Для чего прописывать дважды SSLCertificateFile и SSLCertificateKeyFile, сначала в ssl.conf а потом в VirtualHost?
попробовал удалить из VirtualHost, рабоает, но не наоборот. А если на сервере несколько доменов?

Зачем дважды? В статье у меня этого нет. Есть глобальные настройки для всех виртуальных хостов, а есть настройки конкретного виртуального хоста. Настраивают обычно каждый виртуальный хост в отдельности, так как сертификаты для них уникальные.

День добрый!
Прекрасно зашли ваши установка CentOS и LAMP, а вот тут ну никак. Вероятно, я чего-то недопонимаю. Хочу мигрировать с Ubuntu на CentOS с имеющимися сайтами и сертификатами.
Можно как-то по-подробнее, с нюансами?

А в чем проблема? Тут фактически надо только указать сертификат в конфиге и все. Нюансов нет.

Да, действительно. Ложная тревога. На второй день нашел пару своих ошибок и одно небольшое недопонимание. Всё ок. Спасибо за Ваши статьи.

Стиль изложения — 5 баллов! Четко и по существу. Спасибо.

А как на Zabbix 4 с Centos 7 сделать https? Можете расписать подробно пожалуйста

Так же как и везде в апаче. Заббикс никаких нюансов не приносит — это обычный сайт на php.

источник

Добавить комментарий

Adblock
detector