Настройка HTTPS в Apache Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
wiki:apache_и_https [2011/02/24 18:26]
ini
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'', ​удалив из него все лишние ''<​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}}
  
   ​   ​