klen.github.io

in Blog

Настройка HTTPS для чайников

Серверная реализация IOS Push уведомлений (python) Ctrl→
←Ctrl Несколько полезных сниппетов для джанго


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 не поддерживаются на бесплатном тарифе.

Пример заполнения:

example

Скопируйте полученный ключ <your_domain_name>.key и файл запроса <your_domain_name>.csr в надежное место.

Получение подписанных SSL ключей на 90-дневной период

Подписывать ключи будем у http://ssl.com. Для начала работы войдите на сервис или зарегистрируйтесь.

После входа попадаем на страницу задач и выбираем buy certificate для продолжения.

page

На открывшейся странице выбираем Free SSL.

page

Нажимаем кнопку GET и попадаем на первый шаг процесса подписания нашего сертификата. В открывшейся странице выберите чекбокс I want to submit my CSR now для добавления полученного нами на предыдущем шаге CSR.

В данной статье мы будем настраивать Nginx поэтому из выпадающего списка я выбрал соответствующую опцию.

page

Если CSR запрос был сформирован правильно, то на следующем шаге вас попросят принять условия использования. После принятия вы попадаете в форму ввода дополнительной информации, где от вас потребуется ввод адреса и почтового индекса. Далее информация для контактных лиц.

Пятый шаг — подтверждение домена. Возможно два варианта, размещение файла на сервере или подтверждение по электронной почте. Адреса требуемые для подтверждения через email не всегда доступны, поэтому я обычно выкладываю на сервер полученный файл.

page

Пример конфигурации для Nginx (файл D3AD7299FFC0954B0FD047063ABB7EFD.txt лежит в папке /home/user):

location = /D3AD7299FFC0954B0FD047063ABB7EFD.txt {
    alias /home/user/D3AD7299FFC0954B0FD047063ABB7EFD.txt;
}

После получения подписанного сертификата можно будет удалить файл и изменения в настройках.

Если проверку вы прошли успешно, остается только ждать подтверждения от компании-сертификатора, что может занять от нескольких часов до суток.

page

После добавления ключей компанией сертификатором вам будет выслано уведомительное письмо. Откройте страницу заказа сертификата и загрузите его к себе на компьютер. Для 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;
}

И не забудьте обновить сертификаты через три месяца! :)

Серверная реализация IOS Push уведомлений (python) Ctrl→
←Ctrl Несколько полезных сниппетов для джанго
alt