Настройка SSL в Apache






Сегодня уже никому не нужно объяснять что такое перехват трафика и зачем он нужен. С массовым нашествием беспроводных (и не всегда хорошо защищённых) методов доступа в Интернет необходимость шифрования сетевого трафика стала очевидной не только для пользователей различных интернет-банкингов, но и для тех, кто просто нуждается в защищённом доступе к своему домашнему компьютеру из кафешки в другом городе. Некоторые, к примеру, любят пользоваться разнообразными веб-приложениями, вроде Feng Office или SubSonic, установленными на домашнем сервере. При этом вовсе не хочется, чтобы доступ к кровному контенту достался ещё кому либо. В одной из предыдущих статей, посвящённых Nginx, мы рассматривали настройку SSL-шифрования сайтов, обслуживаемых этим сервером. Сегодняшняя статья посвящена тем, у кого нет Nginx и/или кто не хочет устанавливать его лишь в качестве TLS-прокси к Apache.



В данной статье описывается настройка TLS в Apache с использованием self-signed сертификата, что не годится для public-ресурсов, но вполне подойдёт для организации работы с вашим личным/командным сервером.

При написании заметки в качестве тестовой площадки использовался сервер под управлением Debian 6.0 и Apache 2.2.16.

Установка OpenSSL

Прежде чем приступать к настройке SSL-сайта в Apache, необходимо создать ключ шифрования, а также self-signed сертификат этого ключа. Данные действия выполняются утилитами, которые не входят в состав Apache и должны быть установлены отдельно, если их нет в вашей системе. В Debian/Ubuntu всё ставится одной командой:

В других дистрибутивах название пакета скорее всего будет таким же.

Генерация закрытого ключа и сертификата

В TLS используются асимметричные алгоритмы шифрования, то есть для шифрования и расшифровки данных используется не один ключ, а пара: открытый и закрытый. Открытый ключ сервера передаётся клиенту вместе с сертификатом сервера на стадии генерации сеансового ключа.

Создайте каталог, в котором вы намереваетесь хранить закрытый ключ и сертификат сервера:

Теперь можно сгенерировать закрытый ключ и self-signed сертификат для него:

где server.key — имя файла закрытого ключа, а server.crt — имя файла сертификата.

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

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

Включение mod_ssl

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

а также включить работу виртуальных хостов на порту 443, отредактировав соответствующий участок файла /etc/apache2/ports.conf:

Настройка сайта Apache

Теперь, когда ключ и сертификат готовы, а поддержка SSL в Apache включена, можно приступать к настройке сайта. Создайте конфигурацию виртуального хоста для вашего защищённого сайта (предположим, что вы расположили его в каталоге /var/www/secure) в файле /etc/apache2/site-available/secure:

Обратите внимание на директивы SSL:

  • SSLEngine включает или отключает работу модуля mod_ssl;
  • SSLCertificateKeyFile определяет путь к файлу закрытого ключа сервера;
  • SSLCertificateFile определяет путь к файлу сертификата.

Конечно же, опций, отвечающих за настройку поведения mod_ssl гораздо больше и множество из них определены по умолчанию в файле /etc/apache2/mods-available/ssl.conf. Целью данной заметки являлось создание руководства из серии «за две минуты» и поэтому освещён необходимый минимум знаний. Желающим углубиться в раскопки недр работы и настройки TLS в Apache советую в первую очередь посетить официальную страницу документации, а также справочник по опциям mod_ssl.

Теперь, когда всё готово к работе, можно включать созданный виртуальный хост:

и перезапускать Apache:

Проверка

Если всё прошло успешно и вы не получили никаких ошибок в результате перезапуска сервера, самое время проверить результаты работы. Открыв в браузере URL вашего сайта, вы должны увидеть предупреждение о риске для вашей безопасности в связи с тем, что сайт использует self-signed сертификат:

Добавив этот сайт в исключения, вы получите полноценное TLS-шифрование трафика, спрятав таким образом от любопытных глаз ваши диалоги с HTTP-сервером:




Настройка SSL в Apache: 18 комментариев

  1. Если я не ошибаюсь, есть небольшое ограничение. На 1 IP можно будет повесить только один сайт. Или я не прав?

  2. Для обычного виртуального хоста это справедливо, но для секурного... Я однажды с этим столкнулся и нашел, что шифрование идет прежде, чем заявляется имя. Хотя я, возможно, и что-то не так делал. :)

    тогда меня выручило то, что у нужного сервера было 4 IP

  3. Ради прикола сейчас попробовал сделать два секурных виртхоста. Всё работает.

  4. Ага, нашел. Оказывается, это добавлено только в версии 2.2.12, а я на это попался несколько лет назад. :)

  5. Кстати, Александр, у вас нет подписки на комментарии? Обычно это делает плагин Subscribe To Comments. А то, чтобы увидеть ответ, приходилось периодически обновлять страницу.

  6. ashep, Здравствуйте, помогите пожалуйста за вознаграждение установить и настроить ssl сертификат на хостинге.

  7. СПАСИБО!!!!

    После 3-х часового поиска нормальной инструкции ничего не работало, за 3 минуты сделал по этой.

Комментарии запрещены.