HTTPS (HyperText Transfer Protocol Secure) — расширение протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, «упаковываются» в криптографический протокол SSL или TLS.
Веб-сервер Apache полностью поддерживает работу по HTTPS. Для того, чтобы активировать поддержку HTTPS на уже установленном Apache необходимо выполнить следующее.
Создание ключа и ssl-сертификата
Использование самоподписанных сертификатов хоть и защищает от пассивного прослушивания, тем не менее не гарантирует клиентам, что сервер является именно тем сервером, который им нужен. Преймуществом самоподписанных сертификатов является их бесплатность. Сертификат, подписанных компанией-сертификатором (Certificate authority) стоит денег.
Бесплатные SSL-сертификаты — теперь на 3 года от WoSing.
Для создания ключа и сертификата вводим команду:
Код
$ openssl req -new -x509 -days 30 -keyout server.key -out server.pem
На вопрос «Enter PEM pass phrase:» отвечаем паролем, подтверждаем и запоминаем. На все последующие вопросы отвечаем произвольно, можно просто щелкать по Enter соглашаясь с предложенными вариантами, только на вопрос «Common Name (eg, YOUR name) []:» отвечаем именем сайта, для которого создаем сертификат, например www.example.com.
После ответа на все вопросы в директории должны появиться два новых файла — server.pem и server.crt (ключ и сертификат, соответственно).
Чтобы использовать сгенерированный ключ нужно знать пароль введенный нами, и Apache будет спрашивать его у нас при загрузке, а к чему нам лишние вопросы от демонов? Поэтому снимаем пароль с ключа:
Код
$ cp server.key{,.orig}
$ openssl rsa -in server.key.orig -out server.key
$ rm server.key.orig
$ openssl rsa -in server.key.orig -out server.key
$ rm server.key.orig
Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору:
Код
$ sudo cp server.pem /etc/ssl/certs/
$ sudo cp server.key /etc/ssl/private/
$ sudo chmod 0600 /etc/ssl/private/server.key
$ sudo cp server.key /etc/ssl/private/
$ sudo chmod 0600 /etc/ssl/private/server.key
Настройка Apache
Для начала необходимо активировать mod_ssl:
Код
$ sudo a2enmod ssl
А затем включить настройки HTTPS сайта по умолчанию:
Код
$ sudo a2ensite default-ssl
Теперь необходимо отредактировать файл с настройками HTTPS сайта по умолчанию, указав в нем пути к вашим сертификатам. Сам файл называется /etc/apache2/sites-enabled/default-ssl (или /etc/apache2/sites-enabled/default-ssl.conf).
В этом файле рекомендуется после директивы:
Код
SSLEngine on
добавить строчку:
Код
SSLProtocol all -SSLv2
дабы запретить использование устаревшего протокола SSLv2.
Дальше вам необходимо отредактировать параметры, ответственные за сертификаты:
Код
# Публичный сертификат сервера
SSLCertificateFile /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateFile /etc/ssl/certs/server.pem
# Приватный ключ сервера
SSLCertificateKeyFile /etc/ssl/private/server.key
Теперь просто перезагрузите Apache:
Код
$ sudo service apache2 restart
И если все параметры указаны верно, ваши сайты станут доступны по HTTPS.
Протокол HTTPS работает по 443 порту, поэтому если сервер находится за шлюзом, то необходимо на нем пробросить данный порт.
Перенаправление HTTP запросов на HTTPS
Если вы хотите запретить использование HTTP, то самым разумным будет перенаправлять все HTTP запросы к страницам на их HTTPS адрес. Сделаем это с помощью mod_alias. Если он не включен — включаем:
Код
$ sudo a2enmod alias
$ sudo service apache2 restart
$ sudo service apache2 restart
Затем изменяем файл /etc/apache2/sites-enabled/000-default, отвечающий за виртуальный хост по умолчанию для HTTP запросов. В этот файл добавляем директиву:
Код
Redirect / https://example.com/
При этом все настройки директорий можно удалить, поскольку по HTTP на ваши сайты все равно будет не попасть.
Все, теперь еще раз перезапустите Apache и убедитесь, что при заходе по HTTP вы автоматически перенаправляетесь на HTTPS страницу.