Меню Рубрики

Установка ssl сертификата на apache windows

Apache SSL: переход Apache на HTTPS

Нужен ли HTTPS?

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

Веб-сервер Apache поддерживает работу HTTPS. Для настройки HTTPS на Apache нужен SSL сертификат. Точнее говоря, «SSL сертификат» включает в себя приватный ключ и публичный ключ (сертификат). Также вместе с SSL ключами дополнительно могут присылаться сертификаты центра сертификации, корневой сертификат.

Сертификаты SSL

SSL сертификаты можно разделить на два вида: валидные и самоподписанные.

Сертификат SSL можно сгенерировать у себя на компьютере. Причём можно сгенерировать для любого доменного имени. Но к таким сертификатам у веб-браузеров нет доверия. Поэтому если открыть сайт, защищённый таким сертификатом, то веб-браузер напишет ошибку, что сертификат получен из ненадёжного источника и либо запретит открывать этот сайт, либо предложит перейти на сайт на ваш страх и риск. Это так называемые «самоподписанные сертификаты». Чтобы браузер не выдавал ошибку о ненадёжного сертификате, его нужно добавить в список доверенных. Такие сертификаты подойдут для тестирования веб-сервера и обучению настройки веб-сервера для работы с SSL и HTTPS. Ещё такой сертификат можно использовать на сайте, к которому имеет доступ ограниченный круг лиц (несколько человек) — например, для сайтов в локальной сети. В этом случае они все могут добавить сертификат в доверенные.

Для реального сайта такой сертификат не подойдёт.

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

1) получить тестовый сертификат на 3 месяца (затем его можно продлить)

2) купить сертификат — в этом случае он действует от года и более

Валидный сертификат отличается от самоподписанного тем, что сторонний сервис удостоверяет подлинность этого сертификата. Собственно, оплачивается именно эта услуга удостоверения, а не выдача сертификата.

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

Как сгенерировать SSL сертификат в Windows

У меня веб-сервер установлен в папку C:\Server\bin\Apache24, поэтому если у вас он в другой директории, то подправьте команды под свои условия.

Откройте командную строку Windows (Win+x, далее выберите «Windows PowerShell (администратор)»). В командной строке введите команды:

При вводе последней команды появятся запросы на английском языке. Ниже следует их перевод.

Вас попросят ввести информацию, которая будет включена в запрос вашего сертификата. То, что вы будете вводить, называется Distinguished Name или DN. Там всего несколько полей, которые можно оставить пустыми. В некоторых полях будут значения по умолчанию. Если вы введёте ‘.’, то поле будет оставлено пустым.

Двухбуквенное имя страны (двухбуквенный код)

Название штата или провинции/области (полное имя)

Название населённого пункта (например, города)

Подразделение организации (т.е. отдел)

Общее имя (например, FQDN сервера или ВАШЕ имя). Это самая важная часть — здесь нужно ввести доменное имя. Можете ввести localhost.

Теперь выполните команду:

В результате в каталоге C:\Server\bin\Apache24\bin\ должны появиться три новых файла:

Из них нам понадобятся только два:

Как в Windows для Apache подключить SSL сертификаты

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

Для настройки использования SSL на локальном веб-сервере Apache в Windows следуйте инструкции ниже.

В каталоге C:\Server\ создайте новую папку certs и переместите туда файлы localhost.key и localhost.crt.

В директории C:\Server\bin\Apache24\conf\ откройте текстовым редактором файл httpd.conf. В самый низ добавьте туда строки:

Обратите внимание, что вам может понадобиться отредактировать следующие директивы

  • DocumentRoot — укажите путь до сайтов на сервере
  • ServerName — укажите имя вашего хоста, если то не локалхост

Обратите внимание, что мы не просто поместили эти строки в конфигурационный файл, а заключили их в контейнер VirtualHost. Дело в том, что если этого не сделать, то директива SSLEngine on включит SSL для всего веб-сервера, и даже при попытке открыть сайты на 80 порту, эти подключения будут обрабатываться как HTTPS, что вызовет ошибку «Bad Request. Your browser sent a request that this server could not understand». По этой причине эти настройки помещены в контейнер виртуального хоста. Обратите внимание, что используется ключевое слово _default_ — то есть сюда будут собираться все запросы на 443 порт если они не предназначены для другого хоста, который также настроен. То есть при желании вы можете создать больше виртуальных хостов для работы с HTTPS, при этом вместо _default_ указывайте IP хоста или символ * (звёздочка).

После этого сохраните изменения, закройте файл и перезапустите веб-сервер.

Для проверки сделанных изменений, перейдите по адресу https://localhost/ (протокол HTTPS). Поскольку сертификат является самоподписанным, то появится такое сообщение:

К самоподписанным сертификатам нет доверия и эту ошибку нельзя убрать без добавления таких сертификатов в доверенные. Для перехода нажмите «Всё равно продолжить».

Как уже было сказано, валидные сертификаты нужно покупать, либо использовать тестовые. В чём подвох использования тестовых сертификатов? Формально, в какой-то момент их могут перестать выдавать, но, на самом деле, уже сейчас многие сайты годами живут с такими тестовыми сертификатами. На современных хостингах настроено автоматическое подключение и продление таких сертификатов — это просто супер удобно. Обычно на хостингах предусмотрено некоторое количество абсолютно бесплатных SSL сертификатов с автоматическим продлением, но за небольшую плату (10 рублей в месяц), можно подключить тестовые сертификаты для любого количества сайтов. Пример такого хостинга здесь.

Решение проблем

При некоторых условиях может возникнуть следующая ошибка:

Главная подсказка в первой строке: Can’t open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory — она означает, что возникла ошибка чтения файла C:\Program Files\Common Files\SSL/openssl.cnf из-за того, что он отсутствует.

Файл openssl.cnf поставляется с самим веб-сервером Apache и находится в папке conf. Поэтому есть несколько вариантов, как исправить эту ошибку. Например, можно создать нужные папки и скопировать туда этот файл. Но можно пойти более простым путём — на время создания сертификатов установить переменную окружения OPENSSL_CONF указав в ней правильный путь до файла.

Также нужно переключиться из PowerShell в обычную командную строку Windows, поскольку иначе переменная окружения почему-то не устанавливается. Допустим, сервер размещён в папке C:\Server\bin\Apache24\bin\, тогда файл openssl.cnf расположен по пути C:\Server\bin\Apache24\conf\openssl.cnf, в этом случае, чтобы исправить ошибку Can’t open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory нужно выполнить:

Отредактируйте пути в этих командах в соответствии с вашей структурой папок.

Источник

Настройка 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 $/conf/extra/httpd-ssl.conf

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

#SSLCertificateFile «$/conf/server.crt»
SSLCertificateFile «$/conf/ssl/server.crt»

#SSLCertificateKeyFile «$/conf/server.key»
SSLCertificateKeyFile «$/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. Например, для получения главной страницы сайта нужно набрать:

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

  • отправленные на сервер зашифрованные данные;
  • зашифрованные данные, полученные от сервера;
  • расшифрованный ответ сервера.

Литература:

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Установка ssd диска на компьютер windows 10
  • Установка sp2 на windows 7 обновление kb3125574
  • Установка skype для рабочего стола windows
  • Установка simply linux 7 рядом с windows
  • Установка sharepoint 2010 foundation на windows 7