Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
wiki:apache_и_https [2011/02/25 09:51] [Перенаправление HTTP на HTTPS] |
wiki:apache_и_https [2016/02/13 17:49] (текущий) |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Настройка HTTPS в Apache ====== | ====== Настройка HTTPS в Apache ====== | ||
| + | Веб-сервер [[Apache]] полностью поддерживает работу по HTTPS. Для того, чтобы активировать поддержку HTTPS на уже установленном Apache необходимо выполнить следующее. | ||
| + | ====== Создание ключа и ssl-сертификата ====== | ||
| + | Использование самоподписанных сертификатов хоть и защищает от пассивного прослушивания, тем не менее не гарантирует клиентам, что сервер является именно тем сервером, который им нужен. Преймуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанных компанией-сертификатором (Certificate authority) стоит денег. | ||
| - | Веб-сервер [[Apache]] полностью поддерживает работу по HTTPS. Для того, чтобы активировать поддержку HTTPS на уже установленном Apache необходимо выполнить всего две вещи. | + | Для создания ключа и сертификата вводим команду: |
| + | <code bash>openssl req -new -x509 -days 30 -keyout server.key -out server.pem</code> | ||
| + | На вопрос "Enter PEM pass phrase:" отвечаем паролем, подтверждаем и запоминаем. | ||
| + | На все последующие вопросы отвечаем произвольно, можно просто щелкать по Enter соглашаясь с предложенными вариантами, только на вопрос "Common Name (eg, YOUR name) []:" отвечаем именем сайта, для которого создаем сертификат, например www.example.com. | ||
| + | После ответа на все вопросы в директории должны появиться два новых файла - server.pem и server.crt (ключ и сертификат, соответственно). | ||
| + | |||
| + | Чтобы использовать сгенерированный ключ нужно знать пароль введенный нами, и Apache будет спрашивать его у нас при загрузке, а к чему нам лишние вопросы от демонов? :) Поэтому снимаем пароль с ключа: | ||
| + | <code bash>cp server.key{,.orig} | ||
| + | openssl rsa -in server.key.orig -out server.key | ||
| + | rm server.key.orig</code> | ||
| + | |||
| + | Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору: | ||
| + | <code bash> | ||
| + | sudo cp server.pem /etc/ssl/certs/ | ||
| + | sudo cp server.key /etc/ssl/private/ | ||
| + | sudo chmod 0600 /etc/ssl/private/server.key</code> | ||
| + | |||
| + | ====== Настройка Apache ====== | ||
| Для начала необходимо активировать ''mod_ssl'': | Для начала необходимо активировать ''mod_ssl'': | ||
| <code bash> | <code bash> | ||
| sudo a2enmod ssl | sudo a2enmod ssl | ||
| - | sudo /etc/init.d/apache2 restart | ||
| </code> | </code> | ||
| Строка 14: | Строка 33: | ||
| <code bash> | <code bash> | ||
| sudo a2ensite default-ssl | sudo a2ensite default-ssl | ||
| - | sudo /etc/init.d/apache2 reload | ||
| </code> | </code> | ||
| - | Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к вашим сертификатам. Сам файл называется ''/etc/apache2/sites-enabled/default-ssl''. | + | Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нём пути к вашим сертификатам. Сам файл называется ''/etc/apache2/sites-enabled/default-ssl'' (или ''/etc/apache2/sites-enabled/default-ssl.conf''). |
| В этом файле рекомендуется после директивы | В этом файле рекомендуется после директивы | ||
| Строка 33: | Строка 51: | ||
| дабы запретить использование устаревшего протокола SSLv2. | дабы запретить использование устаревшего протокола SSLv2. | ||
| - | Дальше вам необходимо отредактировать параметры, ответственные за сертификаты. В простейшем случае всё будет выглядеть примерно так: | + | Дальше вам необходимо отредактировать параметры, ответственные за сертификаты. |
| <code apache> | <code apache> | ||
| # Публичный сертификат сервера | # Публичный сертификат сервера | ||
| - | SSLCertificateFile /etc/apache2/certs/youserver.pem | + | SSLCertificateFile /etc/ssl/certs/server.pem |
| # Приватный ключ сервера | # Приватный ключ сервера | ||
| - | SSLCertificateKeyFile /etc/apache2/certs/private.key | + | SSLCertificateKeyFile /etc/ssl/private/server.key |
| - | # Файл с сертификатами промежуточных центров сертификации | + | |
| - | SSLCertificateChainFile /etc/apache2/certs/chain-ca.pem | + | |
| - | # Файл с сертификатом корневого центра сертификации | + | |
| - | SSLCACertificateFile /etc/apache2/certs/ca.crt | + | |
| </code> | </code> | ||
| Строка 49: | Строка 63: | ||
| <code bash> | <code bash> | ||
| - | sudo /etc/init.d/apache2 restart | + | sudo service apache2 restart |
| </code> | </code> | ||
| - | И если все параметры указаны верно, ваши сайты станут доступны по HTTPS. | + | И если все параметры указаны верно, ваши сайты станут доступны по HTTPS. <note important>Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нём пробросить данный порт.</note> |
| ===== Перенаправление HTTP запросов на HTTPS ===== | ===== Перенаправление HTTP запросов на HTTPS ===== | ||
| - | Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Чтобы добиться этого можно, например, организовать перенаправление с помощью ''mod_rewrite''. Для этого сначала необходимо его активировать: | + | Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью ''mod_alias''. Если он не включён — включаем: |
| <code bash> | <code bash> | ||
| - | sudo a2enmod rewrite | + | sudo a2enmod alias |
| - | sudo /etc/init.d/apache2 restart | + | sudo service apache2 restart |
| </code> | </code> | ||
| - | Затем изменить файл ''/etc/apache2/sites-enabled/000-default'', отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл надо добавить внутрь блока | + | Затем изменяем файл ''/etc/apache2/sites-enabled/000-default'', отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву |
| <code apache> | <code apache> | ||
| - | <VirtualHost *:80> | + | Redirect / https://example.com/ |
| - | ... | + | |
| - | </VirtualHost> | + | |
| </code> | </code> | ||
| - | строчки: | + | При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть. |
| - | + | ||
| - | <code apache> | + | |
| - | RewriteEngine On | + | |
| - | RewriteCond %{HTTPS} off | + | |
| - | RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} | + | |
| - | </code> | + | |
| Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу. | Всё, теперь ещё раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу. | ||
| + | ======Ссылки===== | ||
| + | * [[http://plashc.livejournal.com/630.html|Источник]] | ||
| + | * [[http://httpd.apache.org/docs/2.4/rewrite/avoid.html|When not to use mod_rewrite]] | ||
| - | {{tag>Администрирование Веб_сервер Apache HTTPS HTTP SSL}} | + | {{tag>Администрирование веб-сервер Apache HTTPS HTTP SSL}} |
| | | ||