Хочу поделиться небольшой информацией о том, как настроить ssl подключение в apache на сервере с CentOS и перевести сайты с http на https. Делается это не сложно, но есть пара нюансов.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Недавно я уже рассказывал о том как получить бесплатный ssl сертификат для подтверждения доменного имени. Мы его использовали для организации ssl/tls соединений в почтовом сервере. Теперь его же мы будем использовать для того, чтобы перевести наш сайт на работу по ssl протоколу.
О том, как получить бесплатный сертификат от let's encrypt и настроить apache на работу с ним читайте в моей статье по настройке web сервера apache на centos 8.
Установка mod_ssl в apache
В качестве сервера у нас выступает apache на CentOS, хотя это не принципиально, настройка на других linux дистрибутивах будет идентичной. Рабочим web сервером является apache. Использовать ssl протокол в apache мы будем с помощью мода mod_ssl. Первым делом проверим, установлен ли он:
# rpm -qa | grep mod_ssl
Если нет, то устанавливаем:
# yum -y install mod_ssl
После установки мода, идем в директорию /etc/httpd/conf.d и правим там файл настроек ssl.conf. Прописываем пути к сертификатами в директивах SSLCertificateFile и SSLCertificateKeyFile.
Создание виртуального хоста с поддержкой ssl
Далее необходимо либо создать новый виртуальный хост apache, либо отредактировать существующий в файле /etc/httpd/conf/httpd.conf. Добавляем в конец файла:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /root/cert/zeroxzed.ru.crt SSLCertificateKeyFile /root/cert/zeroxzed.ru.kye <Directory /var/www/vhosts/zeroxzed.ru/www> AllowOverride All </Directory> DocumentRoot /var/www/vhosts/zeroxzed.ru/www ServerName zeroxzed.ru </VirtualHost>
После сохранения проверяем конфигурацию apache:
# httpd -t
Если появляется предупреждение:
[warn] _default_ VirtualHost overlap on port 443, the first has precedence
То ищем в /etc/httpd/conf/httpd.conf строчку NameVirtualHost *:80 и добавляем после нее NameVirtualHost *:443
Снова проверяем. Если ошибок нет, перезапускаем апач и заходим на сайт, прописав в адресной строке https, вместо http. Теперь ваш сайт доступен по протоколу https. Но пользователи сайта могут об этом не знать. Было бы разумным сделать переадресацию с открытого протокола на защищенный. Сделаем это.
Переадресация с http на https
Для того, чтобы сделать автоматическую переадресацию с http на https, необходимо в описании виртуального хоста в httpd.conf добавить порт 80 вместе с 443:
<VirtualHost *:80 *:443>
И в корне сайта с помощью .htaccess и mod_rewrite делаем перенаправление всех запросов с http на https:
# cat .htaccess
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}
Теперь даже если просто набрать адрес сайта с http откроется его защищенная версия https. Не забудьте проверить, включен ли у вас модуль mod_rewrite в настройках apache. И проверьте фаервол. Для корректной работы сайта по протоколу https необходимо открыть 443 порт на веб сервере.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Спасибо помогло!
Надо бы исправить zeroxzed.ru.kye -> zeroxzed.ru.key
Хотя все равно никто не замечает.
Здравствуйте не подскажите можно ли получить сертификат 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.
1. Ставим ссльный мод: yum install mod_ssl
2. Создаем дериктории под ключи: mkdir -p /etc/httpd/ssl/private
chmod 700 /etc/httpd/ssl/private
3. Создаем сертификат: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/apache-selfsigned.key -out /etc/httpd/ssl/apache-selfsigned.crt Далее проходим простенький мастер создания сертификата
4. Отредактировать апачевский конф файл ссл: /etc/httpd/conf.d/ssl.conf Строки: DocumentRoot "/usr/share/zabbix"
ServerName example.com:443
SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key
5. systemctl restart httpd.service
6. Далее редактируем httpd.conf
ServerName zbx
DocumentRoot /usr/share/zabbix/
Redirect permanent /secure https://zbx
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/apache-selfsigned.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/apache-selfsigned.key
ServerName zbx
DocumentRoot /usr/share/zabbix/
7. systemctl restart httpd.service
Теперь заббикс должен открывается по https и редиректит обращения на http туда же.
to Jhony коммент выше
ssl.conf покажите чем должен быть заполнен этот файл в виде примера
У меня нет под рукой примера. Я в основном использую веб сервер nginx.
Спасибо! Доходчиво написано. Сэкономил на сертификате.