- Генерация и использование SSL-сертификатов в Linux
- Как SSL-сертификат помогает защитить данные?
- Общий порядок создания SSL-сертификата, ключи и подпись
- Подписание SSL-сертификатов
- Использование SSL-сертификатов для домена
- Заключение
- Как выпустить самоподписанный SSL сертификат и заставить ваш браузер доверять ему
- Создание самозаверяющего SSL-сертификата
- Что такое самоподписанный сертификат SSL?
- Подготовка
- Создание самоподписанного сертификата SSL
- Создание самозаверяющего SSL-сертификата без запроса
- Выводы
Генерация и использование SSL-сертификатов в Linux
В целях безопасности, в частности во избежание перехвата конфиденциальных, персональных или важных данных. Многие владельцы сайтов в сети защищают трафик с помощью SSL-сертификатов. Естественно, защите подлежит только тот трафик, который связан непосредственно с запросами и передачей данных с определённым адресом — адресом сайта. Системные администраторы, сотрудники техподдержки должны ориентироваться в вопросах, касающихся создания и внедрения SSL-сертификатов для хостов. Поскольку предоставляют соответствующие услуги. Для этих целей в системах Linux существует утилита openssl. Она является свободной реализацией методов защиты, протокола SSL, а также генерации сертификатов.
Как SSL-сертификат помогает защитить данные?
На самом деле схема защиты трафика основана на его шифровании открытым ключом и его расшифровке закрытым ключом. Понятие SSL-сертификата применимо в контексте подтверждения того факта, что открытый ключ действительно принадлежит именно тому домену, с которым происходит соединение. Таким образом, в данной схеме присутствуют две составляющие:
- Пара ключей (открытый и закрытый) — для шифрования/расшифровки трафика;
- Подпись открытого ключа. Гарантирующая, что он подлинный и обслуживает именно тот домен, для которого и был создан.
Обе эти составляющие и представляют собой то, что принято обозначать понятием SSL-сертификат. Подпись является гарантией, поскольку выдаётся авторитетным центрами сертификации. Это доступные всем онлайн-сервисы (достаточно воспользоваться любой поисковой системой), которым можно отправить свой ключ, заполнив соответствующую анкету. Далее сервис (центр сертификации) обрабатывает данные из анкеты и сам ключ и высылает уже подписанный ключ обратно его владельцу. Среди самых популярных на сегодняшний день центров сертификации являются такие как Comodo.
Важно заметить, что зашифрованный открытым ключом трафик возможно расшифровать только соответствующим ему закрытым ключом. В свою очередь подпись для открытого ключа от авторитетного цента говорит, что зашифрованный трафик пришёл от «своего» или подлинного узла и его можно принять в обработку, т. е. расшифровать закрытым ключом.
Общий порядок создания SSL-сертификата, ключи и подпись
Во время создания SSL-сертификата происходит последовательная обработка следующих видов ключей:
- *.key – это сами ключи шифрования, открытий и/или закрытый;
- *.csr – ключ, содержащий сформированный запрос для получения подписи сертификата от центра сертификации, а сам запрос — это открытый ключ и информация о домене и организации, связанной с ним;
- *.crt, *.cer, *.pem – это, собственно, сам сертификат, подписанный центром сертификации по запросу из файла *.csr.
Для начала нужно создать закрытый ключ:
Здесь команда genrsa генерирует RSA-ключ, опция -des3 указывает алгоритм шифрования ключа. А опция -out указывает, что ключ должен быть получен в виде файла server.key. Число 2048 — это сложность шифрования. При выполнении этой команды пользователю будет предложено ввести пароль для шифрования. Поскольку указан его алгоритм опцией -des3. Если это личный ключ и его планируется использовать на сервере, который можно настроить в собственных целях, то естественно шифрование обязательно. Однако, многие серверы требуют закрытые ключи без шифрования (например хостинг-площадки, поскольку предоставляют универсальную услугу по заказу SSL-сертификатов). Поэтому перед генерацией закрытого ключа нужно определиться, как он будет использоваться.
Теперь нужно создать запрос на подпись — CSR-файл, который будет включать только что сгенерированный ключ server.key:
При выполнении этой команды пользователю необходимо ввести информацию о домене и организации. Причём наименование домена следует вводить точно, например, если идентификатор URL сайта https://mycompany.com, то ввести нужно mycompany.com. Для URL-идентификатора www.mycompany.com уже необходим отдельный сертификат.
Теперь файл server.csr со сформированным запросом на подпись можно отправить в выбранный центр сертификации.
Подписание SSL-сертификатов
Получить подписанный сертификат, когда имеется закрытый ключ и запрос на подпись можно несколькими способами: воспользоваться услугой авторитетных центров сертификации, отправив им запрос (CSR-файл) и получив в ответ готовый сертификат *.crt. Либо можно сделать сертификат самоподписанным. Т. е. подписать его тем же ключом, который использовался при создании файла CSR. Для этого следует выполнить команду:
Здесь опция -days указывает количество дней, в течение которых выпускаемый сертификат server.crt будет действителен. В данном случае на протяжении одного года.
Также можно создать самоподписанный сертификат из имеющегося закрытого ключа без использования CSR-файла. Но в этом случае нужно вводить информацию CSR-запроса:
Параметр -x509 задаёт формат генерируемого сертификата. Он является самым распространённым и используется в большинстве случаев. Опция -new позволяет запрашивать информацию для запроса у пользователя.
Важно отметить, что сертификаты, подписанные авторитетными центрами сертификации известны веб-браузерам. Самоподписанные сертификаты необходимо импортировать в хранилище доверенных сертификатов веб-браузера вручную. Поскольку соединения с доменами, обслуживаемыми такими сертификатами по-умолчанию блокируются.
Использование SSL-сертификатов для домена
Для использования сертификата доменом, для которого он был создан, необходимо соответствующим образом настроить виртуальный хост этого домена. Для начала нужно сохранить файлы *.crt и *.key где-нибудь, где доступ к ним может получить только их владелец. Например в
/ssl/certs/ нужно поместить файл server.crt, в
/ssl/private/ — файл server.key. Далее, в конфигурационном файле виртуального хоста нужно определить следующие директивы:
Важно заметить, что для SSL-соединений домена должен быть отдельный конфигурационный файл (или просто отдельная конфигурация в одном файле) виртуального хоста для него. Это необходимо, поскольку обычные HTTP-соединения обрабатываются по порту 80, а HTTPS (SSL) — по 443. Это отдельные конфигурации одного виртуального хоста (хотя это не совсем верное определение). Также для Apache должен быть включен модуль SSL. Типичная конфигурация может выглядеть следующим образом:
Как подключить ssl сертификата в nginx читайте в этой статье.
Заключение
В заключение следует заметить, что генерация и подключение SSL-сертификатов к домену — далеко не самая сложная задача. Однако она требует очень внимательного выполнения отдельных её этапов, поскольку от ошибки зависит безопасность для домена.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как выпустить самоподписанный SSL сертификат и заставить ваш браузер доверять ему
Все крупные сайты давно перешли на протокол https. Тенденция продолжается, и многие наши клиенты хотят, чтобы их сайт работал по защищенному протоколу. А если разрабатывается backend для мобильного приложения, то https обязателен. Например, Apple требует, чтобы обмен данными сервера с приложением велся по безопасному протоколу. Это требование введено с конца 2016 года.
На production нет проблем с сертификатами. Обычно хостинг провайдер предоставляет удобный интерфейс для подключения сертификата. Выпуск сертификата тоже дело не сложное. Но во время работы над проектом каждый разработчик должен позаботиться о сертификате сам.
В этой статье я расскажу, как выпустить самоподписанный SSL сертификат и заставить браузер доверять ему.
Чтобы выпустить сертификат для вашего локального домена, понадобится корневой сертификат. На его основе будут выпускаться все остальные сертификаты. Да, для каждого нового top level домена нужно выпускать свой сертификат. Получить корневой сертификат достаточно просто.
Сначала сформируем закрытый ключ:
Затем сам сертификат:
Нужно будет ввести страну, город, компанию и т.д. В результате получаем два файла: rootCA.key и rootCA.pem
Переходим к главному, выпуск самоподписанного сертификата. Так же как и в случае с корневым, это две команды. Но параметров у команд будет значительно больше. И нам понадобится вспомогательный конфигурационный файл. Поэтому оформим все это в виде bash скрипта create_certificate_for_domain.sh
Первый параметр обязателен, выведем небольшую инструкцию для пользователя.
Создадим новый приватный ключ, если он не существует или будем использовать существующий:
Запросим у пользователя название домена. Добавим возможность задания “общего имени” (оно используется при формировании сертификата):
Чтобы не отвечать на вопросы в интерактивном режиме, сформируем строку с ответами. И зададим время действия сертификата:
В переменной SUBJECT перечислены все те же вопросы, который задавались при создании корневого сертификата (страна, город, компания и т.д). Все значение, кроме CN можно поменять на свое усмотрение.
Сформируем csr файл (Certificate Signing Request) на основе ключа. Подробнее о файле запроса сертификата можно почитать в этой статье.
Формируем файл сертификата. Для этого нам понадобится вспомогательный файл с настройками. В этот файл мы запишем домены, для которых будет валиден сертификат и некоторые другие настройки. Назовем его v3.ext. Обращаю ваше внимание, что это отдельный файл, а не часть bash скрипта.
Да, верно, наш сертификат будет валидным для основного домена, а также для всех поддоменов. Сохраняем указанные выше строки в файл v3.ext
Возвращаемся в наш bash скрипт. На основе вспомогательного файла v3.ext создаем временный файл с указанием нашего домена:
Переименовываем сертификат и удаляем временный файл:
Скрипт готов. Запускаем его:
Получаем два файла: mysite.localhost.crt и device.key
Теперь нужно указать web серверу пути к этим файлам. На примере nginx это будет выглядеть так:
Запускаем браузер, открываем https://mysite.localhost и видим:
Браузер не доверяет этому сертификату. Как быть?
Нужно отметить выпущенный нами сертификат как Trusted. На Linux (Ubuntu и, наверное, остальных Debian-based дистрибутивах) это можно сделать через сам браузер. В Mac OS X это можно сделать через приложение Keychain Access. Запускаем приложение и перетаскиваем в окно файл mysite.localhost.crt. Затем открываем добавленный файл и выбираем Always Trust:
Обновляем страницу в браузере и:
Успех! Браузер доверяет нашему сертификату.
Сертификатом можно поделиться с другими разработчиками, чтобы они добавили его к себе. А если вы используете Docker, то сертификат можно сохранить там. Именно так это реализовано на всех наших проектах.
Делитесь в комментариях, используете ли вы https для локальной разработки?
Максим Ковтун,
Руководитель отдела разработки
Источник
Создание самозаверяющего SSL-сертификата
В этой статье объясняется, как создать самоподписанный сертификат SSL с помощью инструмента openssl .
Что такое самоподписанный сертификат SSL?
Самозаверяющий сертификат SSL — это сертификат, подписанный лицом, создавшим его, а не доверенным центром сертификации. Самозаверяющие сертификаты могут иметь тот же уровень шифрования, что и доверенный сертификат SSL, подписанный ЦС.
Веб-браузеры не распознают самозаверяющие сертификаты как действительные. При использовании самозаверяющего сертификата веб-браузер показывает посетителю предупреждение о том, что сертификат веб-сайта не может быть проверен.
Обычно самозаверяющие сертификаты используются для целей тестирования или внутреннего использования. Вы не должны использовать самозаверяющий сертификат в производственных системах, подключенных к Интернету.
Подготовка
Набор инструментов OpenSSL необходим для создания самозаверяющего сертификата.
Чтобы проверить, установлен ли пакет openssl в вашей системе Linux, откройте терминал, введите openssl version и нажмите Enter. Если пакет установлен, система распечатает версию OpenSSL, иначе вы увидите что-то вроде openssl command not found .
Если пакет openssl не установлен в вашей системе, вы можете установить его с помощью диспетчера пакетов вашего дистрибутива:
Ubuntu и Debian
Centos и Fedora
Создание самоподписанного сертификата SSL
Чтобы создать новый самоподписанный сертификат SSL, используйте команду openssl req :
Давайте разберем команду и поймем, что означает каждая опция:
- -newkey rsa:4096 — Создает новый запрос сертификата и 4096-битный ключ RSA. По умолчанию — 2048 бит.
- -x509 — Создает сертификат X.509.
- -sha256 — использовать 265-битный SHA (алгоритм безопасного хеширования).
- -days 3650 — количество дней, в течение которых сертификат должен быть сертифицирован. 3650 — это десять лет. Вы можете использовать любое положительное целое число.
- -nodes — создает ключ без ключевой фразы.
- -out example.crt — указывает имя файла, в которое будет записан вновь созданный сертификат. Вы можете указать любое имя файла.
- -keyout example.key — указывает имя файла, в которое будет -keyout example.key только что созданный закрытый ключ. Вы можете указать любое имя файла.
Для получения дополнительной информации о параметрах команды openssl req посетите страницу документации OpenSSL req.
Как только вы нажмете Enter, команда сгенерирует закрытый ключ и задаст вам ряд вопросов. Предоставленная вами информация используется для создания сертификата.
Введите запрошенную информацию и нажмите Enter .
Сертификат и закрытый ключ будут созданы в указанном месте. Используйте команду ls, чтобы убедиться, что файлы были созданы:
Это оно! Вы создали новый самоподписанный сертификат SSL.
Всегда рекомендуется создавать резервную копию нового сертификата и ключа на внешнем хранилище.
Создание самозаверяющего SSL-сертификата без запроса
Если вы хотите сгенерировать самозаверяющий сертификат SSL без запроса на какой-либо вопрос, используйте параметр -subj и укажите всю информацию о теме:
Поля, указанные в строке -subj , перечислены ниже:
- C= — Название страны. Двухбуквенное сокращение ISO.
- ST= — Название штата или провинции.
- L= — Название населенного пункта. Название города, в котором вы находитесь.
- O= — полное название вашей организации.
- OU= — Организационная единица.
- CN= — полное доменное имя.
Выводы
В этом руководстве мы показали вам, как сгенерировать самоподписанный сертификат SSL с помощью инструмента openssl. Теперь, когда у вас есть сертификат, вы можете настроить приложение для его использования.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник