Настройка HTTPS для чайников
Содержание:
HTTPS (Hypertext Transfer Protocol Secure) — расширение протокола HTTP поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS «упаковываются» в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных. В отличие от HTTP для HTTPS по умолчанию используется TCP-порт 443.
В данной статье я расскажу о том, как бесплатно (90 дней) получить сертифицированные SSL ключи для своего сервера и настроить HTTPS соединения. На данный момент в русскоязычных источниках эта информация представлена разрозненно, поэтому данную статью можно использовать как руководство по получению подписанных ключей и быстрой настройке HTTPS.
Введение
Чтобы подготовить сервер для обработки https-соединений, администратор должен получить и установить в систему сертификат для этого веб-сервера. Сертификат можно создать самостоятельно с помощью Unix утилиты ssl-ca из пакета OpenSSL, но подписанный данным методом сертификат не является безопасным и большинство браузеров выдают предупреждения об этом. Часть агентов также блокирует сайты с такими сертификатами, например IPhone приложения.
Сертификаты подписанные компаниями-сертификаторами избавлены от данной проблемы, но требуют оплаты для использования. Основные компании-сертификаторы: VerySign, SSLCOM, DigiCert и другие. Так сложилось, что я предпочитаю использовать SSLCOM в основном из-за их 90-дневного бесплатного периода использования для новых ключей, получение которого и будет описано в данной статье. За три месяца можно основательно протестировать проект, понять приоритеты, сделать полноценный запуск и в дальнейшем уже решить будете ли вы продлевать действие сертификата за деньги.
Запрос на получение сертификата (CSR)
CSR — запрос на получение сертификата, требуется для подписи ключей компанией-сертификатором. Я создаю его в консоли Unix-систем, например в терминале на стороне сервера. Если у вас нет такой возможности, вы можете создать CSR онлайн: https://www.reg.ru/sslcertificate/generate_key_and_csr
Из консоли:
# Создадим директорию для работы
mkdir -p ~/csr && cd ~/csr
# Создадим приватный ключ и запрос на сертификат
openssl req -new -newkey rsa:2048 -nodes -keyout <your_domain_name>.key -out <your_domain_name>.csr
Note
Все поля CSR должны заполняться на английском. Код страны — двух буквенный Alpha2 (RU для России).
your_domain_name — имя домена для которого создается сертификат
Common name — адрес домена (без www). Wildcart записи вида *.domen.com не поддерживаются на бесплатном тарифе.
Пример заполнения:
Скопируйте полученный ключ <your_domain_name>.key и файл запроса <your_domain_name>.csr в надежное место.
Получение подписанных SSL ключей на 90-дневной период
Подписывать ключи будем у http://ssl.com. Для начала работы войдите на сервис или зарегистрируйтесь.
После входа попадаем на страницу задач и выбираем buy certificate для продолжения.
На открывшейся странице выбираем Free SSL.
Нажимаем кнопку GET и попадаем на первый шаг процесса подписания нашего сертификата. В открывшейся странице выберите чекбокс I want to submit my CSR now для добавления полученного нами на предыдущем шаге CSR.
В данной статье мы будем настраивать Nginx поэтому из выпадающего списка я выбрал соответствующую опцию.
Если CSR запрос был сформирован правильно, то на следующем шаге вас попросят принять условия использования. После принятия вы попадаете в форму ввода дополнительной информации, где от вас потребуется ввод адреса и почтового индекса. Далее информация для контактных лиц.
Пятый шаг — подтверждение домена. Возможно два варианта, размещение файла на сервере или подтверждение по электронной почте. Адреса требуемые для подтверждения через email не всегда доступны, поэтому я обычно выкладываю на сервер полученный файл.
Пример конфигурации для Nginx (файл D3AD7299FFC0954B0FD047063ABB7EFD.txt лежит в папке /home/user):
location = /D3AD7299FFC0954B0FD047063ABB7EFD.txt { alias /home/user/D3AD7299FFC0954B0FD047063ABB7EFD.txt; }
После получения подписанного сертификата можно будет удалить файл и изменения в настройках.
Если проверку вы прошли успешно, остается только ждать подтверждения от компании-сертификатора, что может занять от нескольких часов до суток.
После добавления ключей компанией сертификатором вам будет выслано уведомительное письмо. Откройте страницу заказа сертификата и загрузите его к себе на компьютер. Для Nginx вы получите файл ca_bundle.txt
Полученный файл переименуйте в формат <your_domain_name>.bundle.crt и вместе с ключом который мы создали на первом шаге (<your_domain_name>.key) положите на сервер.
Настройка Nginx для работы с SSL
Для включения SSL в Nginx добавьте в конфигурацию сервера следующие настройки:
server { ... listen 443; ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /<path_to_file>/<your_domain_name>.bundle.crt; ssl_certificate_key /<path_to_file>/<your_domain_name>.key; ... }
Для автоматического направления всех HTTP запросов на HTTPS, обычно достаточно следующей конфигурации:
# HTTPS settings server { listen 443; ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /<path_to_file>/<your_domain_name>.bundle.crt; ssl_certificate_key /<path_to_file>/<your_domain_name>.key; ... } # HTTP settings server { listen 80 rewrite ^(.*) https://$server_name$1 permanent; }
И не забудьте обновить сертификаты через три месяца! :)