Настройка HTTPS для Apache 2.4 под Windows

Два слова о протоколе HTTPS

HTTPS — это протокол обмена данными, который полностью описывается фразой "HTTP поверх SSL/TLS". Когда пользователь набирает в браузере адрес сайта, например, "https://www.site.com/info.html", происходит следующее:

  1. Веб-браузер посредством DNS-запроса определяет IP-адреса сервера "www.site.com". Если не используется технология DNSCrypt, этот запрос происходит в открытом виде, без шифрования.
  2. Между веб-браузером и веб-сервером устанавливается защищённый канал передачи данных SSL/TLS.
  3. По защищённому каналу осуществляется обмен между веб-браузером и веб-сервером по протоколу HTTP.

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

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

  1. Сгенерировать криптографические ключи веб-сервера.
  2. Получить сертификат веб-сервера.
  3. Настроить веб-сервер на работу по протоколу HTTPS.

В дальнейшем изложении предполагается, что установка и настройка веб-сервера выполнена в соответствии с рекомендациями, изложенными в статье "Параметрическая настройка Apache 2.4 под Windows".

Генерация криптографических ключей

Для генерации криптографических ключей понадобится ввести ряд команд в окне командной строки. Прежде всего, для хранения криптографических файлов создадим папку "D:\www\conf\ssl" и сделаем её текущей:

D:
MD \www\conf\ssl
CD \www\conf\ssl

Механизмы криптографии в поставке Apache от Apache Lounge реализованы с помощью пакета OpenSSL, который представлен программой "Apache24\bin\openssl.exe". Чтобы не набирать постоянно полный путь к ней, добавим папку с двоичными файлами веб-сервера в переменную среды окружения PATH:

PATH %PATH%;"%ProgramFiles%\Apache24\bin"

Для генерации секретного ключа сервера нужно в консоли OpenSSL ввести команду:

openssl.exe genrsa -out server.key 2048

В этой команде "server.key" — это имя файла, в который будет записан секретный ключ, а "2048" — длина ключа в битах. Файл "server.key" содержит конфиденциальную информацию, поэтому нужно принять меры по его защите, чтобы предотвратить компрометацию сервера.

Открытый ключ сервера может быть извлечён из секретного ключа и выгружен в файл "server.pub" командой:

openssl.exe rsa -in server.key -pubout > server.pub

Однако для настройки HTTPS-сервера в явном виде открытый ключ нигде не требуется.

Получение сертификата

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

openssl.exe req -new -key server.key -out server.csr -config ../openssl.cnf

В параметре "-config" указан путь к файлу конфигурации OpenSSL, который находится в папке "conf" поставляемого пакета с веб-сервером.

Для генерации запроса нужно набрать с клавиатуры ответы на задаваемые вопросы о принадлежности и реквизитах сервера. На этом этапе важно иметь в виду, что для ввода в поле данных пустого значения нужно ввести " . " (точку). Если вместо этого просто нажать клавишу [Enter], то будет принято значение по умолчанию, которое указано в квадратных скобках. А сами данные следующие:

County name
— двухзначный буквенный код страны;
State or Province Name
— название региона, области, района;
Locality Name
— название населённого пункта;
Organization Name
— название организации;
Organizational Unit Name
— название подразделения;
Common Name
— доменное имя сервера;
Email Address
— контактный адрес электронной почты;
A challenge password
— кодовое слово;
An optional company name
— дополнительное название организации;

Значения последних двух полей вводить не обязательно. Самое главное — правильно указать доменное имя сервера, потому что именно по этому реквизиру веб-браузеры будут проверять подлинность веб-сервера.

В результате выполнения этой команды будет сформирован файл "server.csr", содержащий необходимую для выдачи сертификата информацию. Этот файл можно отправлять в удостоверяющий центр, после чего ожидать от него ответа.

Но для локального тестирования сайта или внутреннего использования в корпоративной интрасети можно подписать сертификат секретным ключом самого веб-сервера, а не удостоверяющего центра, получив так называемый "самоподписанный" сертификат. Делается это с помощью команды:

openssl.exe x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Сертификат сроком на 365 дней, подписанный секретным ключом сервера "server.key" в ответ на запрос "server.csr", помещается в файл "server.crt".

Настройка веб-сервера

В результате выполнения описанных выше действий в папке "D:\www\conf\ssl" имеются необходимые для работы протокола HTTPS файлы:

server.key
— секретный ключ веб-сервера;
server.crt
— сертификат веб-сервера.

За обслуживание протокола SSL/TLS отвечает модуль "mod_ssl", который вместе с модулем кеширования и соответствующим файлом настроек нужно подключить к веб-серверу с помощью следующих изменений главного конфигурационного файла "D:\www\conf\httpd.conf":

#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

#LoadModule ssl_module modules/mod_ssl.so
LoadModule ssl_module modules/mod_ssl.so

#Include conf/extra/httpd-ssl.conf
Include ${DOCROOT}/conf/extra/httpd-ssl.conf

Если веб-сервер установлен в соответствии с описанной ранее методикой, то в конфигурационном файле "D:\www\conf\extra\httpd-ssl.conf" нужно все вхождения "${SRVROOT}" заменить на "${DOCROOT}". Кроме того, нужно в этом же файле исправить пути к секретному ключу и сертификату веб-сервера:

#SSLCertificateFile "${DOCROOT}/conf/server.crt"
SSLCertificateFile "${DOCROOT}/conf/ssl/server.crt"

#SSLCertificateKeyFile "${DOCROOT}/conf/server.key"
SSLCertificateKeyFile "${DOCROOT}/conf/ssl/server.key"

В том же файле нужно указать правильные имя сервера и контактный адрес электронной почты. Эти реквизиты должны совпадать с теми, которые были введены при формировании запроса на сертификат. Например, для локального сервера доменное имя будет "localhost", а адрес электронной почты — "webmaster@localhost":

#ServerName www.example.com:443
ServerName localhost:443

#ServerAdmin admin@example.com
ServerAdmin webmaster@localhost

Если после выполненных настроек в адресной строке браузера набрать "https://localhost/", то при использовании самоподписанного сертификата отобразится строгое предупреждение:

Действия для посещения сайта с недостоверным сертификатом.

Рис. Отключение системы защиты веб-браузера от доступа к сайтам с недостоверными сертификатами.

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

В решении проблем, возникающих при настройке доступа к серверу по протоколу HTTPS, может помочь команда, устанавливающая защищённое протоколом SSL/TLS соединение с веб-сервером:

openssl.exe s_client -connect localhost:443 -state -debug

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

GET / HTTP/1.0

Ввод команды нужно завершить двумя нажатиями клавиши [Enter]. В ответ на экран будут выведены:

Литература:

Ivan Risticz. Apache Security, 2005.

Книги Создание сайтов

Книги Интернет

Яндекс.Метрика