- Создание сертификатов с помощью программы OpenSSL
- Как выпустить самоподписанный SSL сертификат и заставить ваш браузер доверять ему
- Создание сертификатов с помощью программы OpenSSL
- Как: Создать CSR в OpenSSL без Вопросов (Неинтерактивно)
- Создание CSR и Ключа в OpenSSL Без Вопросов
- Генерация CSR из Существующего Ключа в OpenSSL
- Автоматическая Неинтерактивная Генерация CSR
Создание сертификатов с помощью программы OpenSSL
1. Выберем каталог для хранения ключей и сертификатов и назначим необходимый уровень доступа.
# mkdir certs crl newcerts private
# chmod 700 private
2. Сгенерируем приватный ключ.
# openssl genrsa -out /root/ca/private/ca_key.pem 2048
3. Создадим сертификат CA для этого приватного ключа
# openssl req -new -x509 -days 3650 -key /root/ca/private/ ca_key.pem -out /root/ca/certs/ ca.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:NSO
Locality Name (eg, city) []:Novosibirsk
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kraftec
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.kraftec.net
Для создания сертификата SSL для Captive портала и Веб-консоли необходимо создать файл конфигурации
Создадим конфигурационный файл для OpenSSL.
Добавим в данный файл следующие блоки
certificate = $certs/ ca.crt
private_key = $dir/private/ ca_key.pem
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
emailAddress = Email Address
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=DNS:auth.kraftec.net, DNS:logout.kraftec.net, DNS:block.kraftec.net, DNS:ftpclient.kraftec.net, DNS:sslvpn.kraftec.net
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Сгенерируем ключ для SSL сертификата Captive портала
# openssl genrsa -out /root/ca/private/Captiv_key.pem 2048
Сгенерируем ключ для SSL сертификата Веб-консоли
# openssl genrsa -out /root/ca/private/Web_key.pem 2048
Сгенерируем запрос на SSL сертификат Captive портала
# openssl req -new -key /root/ca/private/Captiv_key.pem -config /root/ca/openssl.cnf -out /root/ca/ Captive.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [RU]:
State or Province Name (full name) [NSO]:
Locality Name (eg, city) [Novosibirsk]:
Organization Name (eg, company) [Kraftec]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:auth.kraftec.net
Подпишем полученный запрос с помощью сертификата УЦ.
# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/openssl.cnf -extensions usr_cert -in Captive.csr -out Captive.crt
Getting CA Private Key
Сгенерируем запрос на SSL сертификат Веб-консоли
Предварительно исправим конфигурационный файл в расширении usr_cert изменим параметр на subjectAltName= DNS:utm.kraftec.net
# openssl req -new -key /root/ca/private/Web_key.pem -config /root/ca/openssl.cnf -out /root/ca/Web.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [RU]:
State or Province Name (full name) [NSO]:
Locality Name (eg, city) [Novosibirsk]:
Organization Name (eg, company) [Kraftec]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:utm.kraftec.net
Подпишем полученные запросы с помощью сертификата УЦ.
# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/ openssl.cnf -extensions usr_cert -in Web.csr -out Web.crt
Getting CA Private Key
Импортируем данные сертификаты и приватные ключи в UserGate в раздел сертификаты.
Как выпустить самоподписанный 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 для локальной разработки?
Максим Ковтун,
Руководитель отдела разработки
Создание сертификатов с помощью программы OpenSSL
1. Выберем каталог для хранения ключей и сертификатов и назначим необходимый уровень доступа.
# mkdir certs crl newcerts private
# chmod 700 private
2. Сгенерируем приватный ключ.
# openssl genrsa -out /root/ca/private/ca_key.pem 2048
3. Создадим сертификат CA для этого приватного ключа
# openssl req -new -x509 -days 3650 -key /root/ca/private/ ca_key.pem -out /root/ca/certs/ ca.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:NSO
Locality Name (eg, city) []:Novosibirsk
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kraftec
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.kraftec.net
Для создания сертификата SSL для Captive портала и Веб-консоли необходимо создать файл конфигурации
Создадим конфигурационный файл для OpenSSL.
Добавим в данный файл следующие блоки
certificate = $certs/ ca.crt
private_key = $dir/private/ ca_key.pem
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
organizationalUnitName = Organizational Unit Name (eg, section)
commonName = Common Name (e.g. server FQDN or YOUR name)
emailAddress = Email Address
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName=DNS:auth.kraftec.net, DNS:logout.kraftec.net, DNS:block.kraftec.net, DNS:ftpclient.kraftec.net, DNS:sslvpn.kraftec.net
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
Сгенерируем ключ для SSL сертификата Captive портала
# openssl genrsa -out /root/ca/private/Captiv_key.pem 2048
Сгенерируем ключ для SSL сертификата Веб-консоли
# openssl genrsa -out /root/ca/private/Web_key.pem 2048
Сгенерируем запрос на SSL сертификат Captive портала
# openssl req -new -key /root/ca/private/Captiv_key.pem -config /root/ca/openssl.cnf -out /root/ca/ Captive.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [RU]:
State or Province Name (full name) [NSO]:
Locality Name (eg, city) [Novosibirsk]:
Organization Name (eg, company) [Kraftec]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:auth.kraftec.net
Подпишем полученный запрос с помощью сертификата УЦ.
# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/openssl.cnf -extensions usr_cert -in Captive.csr -out Captive.crt
Getting CA Private Key
Сгенерируем запрос на SSL сертификат Веб-консоли
Предварительно исправим конфигурационный файл в расширении usr_cert изменим параметр на subjectAltName= DNS:utm.kraftec.net
# openssl req -new -key /root/ca/private/Web_key.pem -config /root/ca/openssl.cnf -out /root/ca/Web.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
Country Name (2 letter code) [RU]:
State or Province Name (full name) [NSO]:
Locality Name (eg, city) [Novosibirsk]:
Organization Name (eg, company) [Kraftec]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:utm.kraftec.net
Подпишем полученные запросы с помощью сертификата УЦ.
# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/ openssl.cnf -extensions usr_cert -in Web.csr -out Web.crt
Getting CA Private Key
Импортируем данные сертификаты и приватные ключи в UserGate в раздел сертификаты.
Как: Создать CSR в OpenSSL без Вопросов (Неинтерактивно)
В это статье, Вы найдете информацию о том, как сгенерировать CSR (Запрос на Подписание Сертификата) с помощью OpenSSL из командной строки в Linux, автоматически отвечая на вопросы о теме сертификата.
Ниже Вы найдете два примера создания CSR с помощью OpenSSL.
В первом примере я покажу как с помощью одной команды создать CSR с новым секретным ключом.
А во втором примере Вы увидите как сгенерировать CSR из существующего ключа (если у Вас уже есть секретный ключ и Вы ходите продолжить использовать его).
Оба примера показывают как создать CSR с помощью OpenSSL автоматически (во время генерации CSR Вас не будут спрашивать о значении полей темы сертификата).
Таким образом Вы можете использовать эти примеры в shell скриптах, для автоматизации генерации CSR.
Создание CSR и Ключа в OpenSSL Без Вопросов
Используйте следующую команду для генерации нового 2048-битного секретного ключа example.key и создания CSR example.csr на его основании:
Опция | Описание |
---|---|
openssl req | утилита генерации CSR |
-nodes | секретный ключ не шифруется |
-newkey | создание CSR и нового секретного ключа |
rsa:2048 | генерация 2048-битного RSA ключа |
-keyout | файл в который будет записан новый секретный ключ |
-out | файл в который будет записан CSR |
-subj | устанавливает тему сертификата |
Генерация CSR из Существующего Ключа в OpenSSL
Используйте следующую команду для генерации CSR example.csr из секретного ключа example.key :
Опция | Описание |
---|---|
openssl req | утилита генерации CSR |
-new | создание нового CSR |
-key | указывает из какого файла брать секретный ключ |
-out | файл в который будет записан CSR |
-subj | устанавливает тему сертификата |
Автоматическая Неинтерактивная Генерация CSR
Секрет генерации CSR без интерактивных вопросов о значении полей которые используются в теме сертификата, заключается в опции -subj .
-subj arg | Указывает значение полей темы сертификата. Аргументы (arg) должны передаваться в формате /тип0=значение0/тип1=значение1/тип2=…, символы могут экранироваться \ (обратным слэшем), пробелы не пропускаются. |
Ниже приведены поля, которые необходимо заполнить для создания CSR:
Поле | Значение | Пример |
---|---|---|
/C= | Country (Страна) | GB |
/ST= | State (Область) | London |
/L= | Location (Город) | London |
/O= | Organization (Организация) | Global Security |
/OU= | Organizational Unit (Отдел организации) | IT Department |
/CN= | Common Name (Доменное имя сайта) | example.com |
Вы создали Запрос на Подписание Сертификата, который представляет из себя закодированный файл.
Теперь вы можете декодировать CSR для того, чтобы проверить что он содержит правильную информацию.