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

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: Apache, CentOS, Ubuntu, FreeBSD.

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

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

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

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

а) на Red Hat / CentOS:

cd /etc/httpd

б) на Debian / Ubuntu:

cd /etc/apache2

в) во FreeBSD:

cd /usr/local/etc/apache24

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

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

systemctl restart apache2

service apache2 restart

* первая, как правило, используется в системах на базе RPM, вторая — DEB, третья — BSD.

Шаг 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 # Ubuntu # Linux # FreeBSD # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет