SSL сертификаты становятся обязательным требованием для любого сайта. Но не все знают, как правильно их создавать. В этой статье мы рассмотрим как сделать самоподписанный SSL сертификат с нуля для любой платформы. Узнаете все тонкости процесса и сможете настроить надежную защиту сайта от взлома.
1. Что такое SSL сертификат и зачем он нужен
SSL (Secure Sockets Layer) сертификат - это цифровой сертификат, который подтверждает подлинность веб-сайта и шифрует трафик между сервером и клиентом. SSL сертификат позволяет установить защищенное соединение HTTPS и гарантирует, что пользователь общается именно с тем сайтом, которому доверяет, а не с мошенниками.
Когда пользователь заходит на сайт по протоколу HTTPS, происходит установка защищенного соединения. Браузер проверяет SSL сертификат сайта и если сертификат действителен, устанавливается шифрованное соединение. Все данные, которыми обмениваются пользователь и сервер, шифруются и не могут быть перехвачены или подменены третьей стороной.
Основными преимуществами использования SSL сертификата являются:
- Шифрование трафика и защита конфиденциальных данных
- Подтверждение подлинности сайта
- Повышение доверия пользователей
- Более высокие позиции в выдаче поисковиков
Существует 3 основных типа SSL сертификатов:
- Доменные (DV) - подтверждают владение доменом
- Организационные (OV) - подтверждают идентификацию компании
- Расширенные (EV) - проходят максимальную проверку
Отличие самоподписанных сертификатов в том, что они не проходят проверку центра сертификации и не гарантируют подлинность сайта для пользователей. Но при этом обеспечивают шифрование трафика, что важно для внутренних IT-систем.
2. Требования для создания самоподписанного SSL сертификата
Чтобы создать самоподписанный SSL сертификат необходимо выполнить следующие минимальные требования:
- Установленный веб-сервер (Apache, Nginx, IIS)
- Криптографическая библиотека OpenSSL
- Зарегистрированное доменное имя
- Наличие закрытого (private) и открытого (public) ключей
- Корректная настройка виртуального хоста на сервере
- Настроенная зона DNS для домена
Помимо этого потребуются базовые знания командной строки Linux или Windows и умение редактировать конфигурационные файлы веб-сервера. Рассмотрим подробнее каждый из этих компонентов.
Веб-сервер
Веб-сервер является основой, на которой будет установлен SSL сертификат. Популярными веб-серверами являются Apache, Nginx и IIS. У каждого есть свои особенности по установке SSL, но общие принципы схожи.
OpenSSL
OpenSSL - это бесплатная криптографическая библиотека, которая позволяет генерировать SSL ключи, сертификаты, CSR запросы. Установлена по умолчанию на большинстве дистрибутивов Linux. Для Windows нужно отдельно скачать дистрибутив OpenSSL.
Зарегистрированный домен
SSL сертификат привязывается к доменному имени сайта. Поэтому для его создания нужен хотя бы один зарегистрированный домен. Без домена придется использовать IP адрес сервера в качестве общего имени, что неудобно.
Ключи
Закрытый и открытый ключи будут использоваться для шифрования трафика между сервером и клиентом. Закрытый ключ хранится на сервере в тайне. Открытый ключ встраивается в сертификат и доступен для проверки.
Настройка виртуального хоста
Перед установкой SSL нужно создать и настроить виртуальный хост на 80 порту для обслуживания HTTP трафика. А затем добавить второй виртуальный хост на 443 порту, куда будет установлен SSL сертификат.
Настройка DNS
Чтобы сайт был доступен по доменному имени, а не IP адресу, нужно настроить зону DNS. Создать записи типа A, указав IP адрес сервера. А также добавить запись CNAME для www поддомена.
После выполнения этих минимальных требований можно сгенерировать ключи и приступать к созданию самоподписанного SSL сертификата для выбранного домена и веб-сервера.
3. Генерация ключа и запроса на подпись сертификата
Первым делом нужно сгенерировать закрытый ключ (private key), который будет использоваться на сервере для шифрования данных. Для этого в командной строке выполняем:
openssl genrsa -out private.key 2048
Эта команда создаст RSA ключ длиной 2048 бит и сохранит его в файл private.key. Рекомендуемая длина ключа от 2048 бит для обеспечения достаточного уровня безопасности.
Следующий шаг - создание запроса на подпись сертификата или CSR (Certificate Signing Request). Этот запрос будет содержать данные нашей организации и открытый ключ. Команда выглядит так:
openssl req -new -key private.key -out csr.pem
При выполнении этой команды OpenSSL задаст несколько вопросов про организацию, которые нужно будет заполнить:
- Country Name (2 letter code) [XX]:
- State or Province Name (full name) []:
- Locality Name (eg, city) [Default City]:
- Organization Name (eg, company) [Default Company Ltd]:
- Common Name (e.g. server FQDN or YOUR name) []:
В поле Common Name нужно указать доменное имя сервера, для которого выпускается сертификат. После заполнения данных будет сгенерирован файл csr.pem с запросом на подпись.
Дополнительные параметры которые можно указать при генерации CSR:
- -subj - указать данные вручную без вопросов
- -sha256 - использовать алгоритм sha256
- -days 365 - срок действия сертификата
- -keyout - указать имя выходного файла ключа
- -out - указать имя выходного файла csr
После генерации ключа и CSR можно приступать непосредственно к созданию самоподписанного SSL сертификата.
4. Создание и настройка самоподписанного SSL сертификата
Создание самоподписанного сертификата заключается в подписании ранее сгенерированного CSR запроса нашим закрытым ключом. Выполняется эта операция командой:
openssl x509 -req -days 365 -in csr.pem -signkey private.key -out certificate.crt
Эта команда принимает CSR файл в качестве входных данных, подписывает его закрытым ключом private.key, устанавливает срок действия в 365 дней и сохраняет результат в файл certificate.crt.
На этом этапе сгенерирован самоподписанный SSL сертификат для нашего сайта, который можно установить на веб-сервер.
Обычно сертификаты хранятся в формате PEM (расширение .pem или .crt). Но некоторые сервера, например, Tomcat требуют конвертации сертификата в формат PKCS12. Это делается командой:
openssl pkcs12 -export -in certificate.crt -inkey private.key -out certificate.p12 -name "My Certificate"
После конвертации получится файл certificate.p12, который в дальнейшем устанавливается в хранилище сертификатов сервера и привязывается к веб-приложению.
Для настройки SSL сертификата на веб-сервере обычно нужно:
- Установить сертификат в хранилище сервера
- Указать пути к файлам сертификата и ключа
- Добавить HTTPS порт в список прослушиваемых
- Настроить протоколы и шифрование для SSL
- Включить модуль SSL в веб-сервере
После этого можно будет протестировать работу самоподписанного сертификата и защищенного соединения HTTPS для вашего сайта.
На этом основные шаги по созданию и установке SSL сертификата рассмотрены. Далее мы подробно разберем особенности на различных платформах и веб-серверах.