Настройка Apache + SSL для работы сайта по HTTPS

Что такое Apache простыми словами.

Инструкция написана для операционных систем на базе UNIX.

Шаг 1. Создание сертификата

Для боевого сервера, сертификат должен быть получен от доверенного центра сертификации — либо локального для компании, либо коммерческого.

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

cd /etc/httpd

cd /etc/apache2

cd /usr/local/etc/apache24

* 1-й пример для CentOS, 2-й — Ubuntu/Debian (apache версии 2.x), 3-й — FreeBSD (apache версии 2.4).

Создаем папку для сертификатов и переходим в нее:

mkdir ssl ; cd ssl

И генерируем сертификат:

openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=test.dmosk.local/CN=test"

* в данном примере созданы открытый и закрытый ключи на 4 года (1461 день); значения параметра subj могут быть любыми в рамках тестирования.

Шаг 2. Установка модуля SSL для Apache

Прежде, чем устанавливать модуль, выполняем команду:

apachectl -M | grep ssl

Если видим строчку, на подобие:

ssl_module (shared)

Спускаемся к шагу 3 данной инструкции.

Иначе, устанавливаем httpd ssl_module.

Для CentOS:

yum install mod_ssl

Для Ubuntu/Debian:

a2enmod ssl

Для FreeBSD:

Открываем файл конфигурации apache:

ee /usr/local/etc/apache24/httpd.conf

* подразумевается, что используется apache 2.4.

Находим и снимаем комментарии со следующих строчек:

...
LoadModule ssl_module libexec/apache24/mod_ssl.so
...
Include etc/apache24/extra/httpd-ssl.conf
...

И ставим комментарии в следующих строках:

#<IfModule ssl_module>
#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin
#</IfModule>

 

Чтобы настройки применились, необходимо перезапустить веб-сервер:

systemctl restart httpd

или

service apache2 restart

Шаг 3. Настройка Apache

Выходим из папки ssl:

cd ..

Открываем файл с настройкой виртуальный доменов.

Для CentOS:

vi conf.d/site.conf

* где site.conf — конфигурационный файл для конкретного сайта

Для Ubuntu/Debian:

vi sites-enabled/site

Для FreeBSD:

ee extra/httpd-vhosts.conf

В открытый файл добавляем следующее:

<VirtualHost *:443>
    ServerName site.ru
    DocumentRoot /var/www/apache/data
    SSLEngine on
    SSLCertificateFile ssl/cert.pem
    SSLCertificateKeyFile ssl/cert.key
</VirtualHost>

* где ServerName — домен сайта; DocumentRoot — расположение файлов сайта в системе; SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей, которые были сгенерированы на шаге 1.

Проверяем корректность настроек в Apache:

apachectl configtest

Если видим:

Syntax OK

Перечитываем конфигурацию apache:

apachectl graceful

Шаг 4. Проверка работоспособности

Открываем браузер и переходим на наш сайт, добавив https://. При использовании самоподписного сертификата (как в нашем случае), обозреватель выдаст предупреждение, что передача данных не безопасна. Подтверждаем наше намерение открыть сайт. Если все работает, переходим к шагу 5.

Если сайт не заработал, пробуем найти причину по log-файлу. Как правило, он находится в каталоге /var/log/apache или /var/log/httpd.

Шаг 5. Настройка редиректа

Чтобы все запросы по http автоматически перенаправлялись на https, необходимо настроить перенаправление (redirect). Есть несколько способов это сделать.

В конфигурационном файле

Открываем файл с настройкой виртуальных доменов (как в шаге 3) и дописываем следующее:

<VirtualHost *:80>
    ServerName site.ru
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

* в конкретном примере, мы перенаправили все запросы для сайта site.ru.
** обратите особое внимание, что если у Вас уже есть VirtualHost *:80 для настраиваемого сайта, необходимо его закомментировать или отредактировать.

В файле .htaccess

RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Apache + NGINX

 При использовании веб-сервера на базе и Apache и NGINX, как правило, наружу смотрит последний. В таком случае, именно он будет отвечать на http-запросы, и в таком случае нужно настраивать SSL на NGINX.

#Сервера #Интернет #Безопасность #UNIX #Linux #FreeBSD #CentOS #Ubuntu
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет