Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия Последняя версия Следующая версия справа и слева | ||
wiki:apache_и_https [2011/02/24 18:26] ini |
wiki:apache_и_https [2015/03/31 03:12] [Ссылки] |
||
---|---|---|---|
Строка 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'', удалив из него все лишние ''<Directory>'' и оставив из описаний директорий только примерно следующее: | + | Затем изменяем файл ''/etc/apache2/sites-enabled/000-default'', отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву |
<code apache> | <code apache> | ||
- | DocumentRoot /var/www/ | + | Redirect / https://example.com/ |
- | <Directory /> | + | |
- | Options FollowSymLinks | + | |
- | AllowOverride None | + | |
- | </Directory> | + | |
- | <Directory /var/www/> | + | |
- | Options -Indexes FollowSymLinks MultiViews | + | |
- | AllowOverride None | + | |
- | RewriteEngine On | + | |
- | RewriteCond %{HTTPS} off | + | |
- | RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} | + | |
- | Order allow,deny | + | |
- | allow from all | + | |
- | </Directory> | + | |
</code> | </code> | ||
+ | |||
+ | При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты всё равно будет не попасть. | ||
Всё, теперь ещё раз перезапустите 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}} | ||
| |