- Для того что бы сгенерировать запрос сертификата для нескольких доменов нужно отредактировать файл /etc/ssl/openssl.cnf:
- Создать запрос на подпись сертификата на основе существующего сертификата
- Convert certificate formats
- Convert der to pem
- Convert pem to der
- Convert pem to pkcs12
- Convert pem to pkcs7
- Convert pkcs7 to pem
- Create a private key
- Decrypt a private key
- Encrypt a private key
- Generate a csr from an existing certificate and private key
- Generate a csr from an existing private key
- Generate a self-signed certificate from an existing private key
- Generate a self-signed certificate from an existing private key and csr
- Generating csrs
- Generating ssl certificates
- Openssl version
- Pem (.pem, .crt, .cer) в pfx
- Pkcs # 7 / p7b (.p7b, .p7c) в pfx
- Private keys
- Verify a certificate was signed by a ca
- Verify a private key
- Verify a private key matches a certificate and csr
- View certificate entries
- View certificates
- View csr entries
- Генерация csr запроса через openssl
- Другие полезные команды для работы с сертификатами в openssl
- Как выпустить самоподписанный ssl сертификат и заставить ваш браузер доверять ему
- Как создать закрытый ключ openssl
- Как создать запрос на подпись сертификата
- Подпишем сертификат самостоятельно
- Предпосылки
- Проверим сертификат
- Проверка закрытого ключа
- Процесс установки ssl сертификата
- Сгенерировать запрос подписи сертификата (csr) для существующего закрытого ключа
- Снятие пароль passphrase в private key
- Создадим самоподписанный сертификат ssl с помощью openssl
- Создадим самоподписанный сертификат, используя существующий закрытый ключ и csr
- Создание (генерация) запроса csr
- Создание (генерация) приватного ключа pkey
- Создание сертификатов с помощью программы openssl
- Требования
- Установка openssl
- Conclusion
- Заключение
Для того что бы сгенерировать запрос сертификата для нескольких доменов нужно отредактировать файл /etc/ssl/openssl.cnf:
Массив alt_names будет содержать альтернативные имена доменов SAN включеные в сертификат.
Выполняется в командной строке в окне Microsoft Windows
В процессе CSR вас попросят предоставить несколько фрагментов информации. Большинство имен
информационные поля, которые вы попросите предоставить, понятны, но есть несколько названий полей, которые могли бы
быть запутанным. Мы объясним их, когда мы рассмотрим скриншоты различных этапов процесса.
Создать запрос на подпись сертификата на основе существующего сертификата
openssl x509 -x509toreq -in adgrafics.crt -out adgrafics.csr -signkey adgrafics.key
Convert certificate formats
All of the certificates that we have been working with have been X.509 certificates that are ASCII PEM encoded. There are a variety of other certificate encoding and container types; some applications prefer certain formats over others. Also, many of these formats can contain multiple items, such as a private key, certificate, and CA certificate, in a single file.
OpenSSL can be used to convert certificates to and from a large variety of these formats. This section will cover a some of the possible conversions.
Convert der to pem
Use this command if you want to convert a DER-encoded certificate (domain.der) to a PEM-encoded certificate (domain.crt):
Convert pem to der
Use this command if you want to convert a PEM-encoded certificate (domain.crt) to a DER-encoded certificate (domain.der), a binary format:
The DER format is typically used with Java.
Convert pem to pkcs12
Use this command if you want to take a private key (domain.key) and a certificate (domain.crt), and combine them into a PKCS12 file (domain.pfx):
You will be prompted for export passwords, which you may leave blank. Note that you may add a chain of certificates to the PKCS12 file by concatenating the certificates together in a single PEM file (domain.crt) in this case.
PKCS12 files, also known as PFX files, are typically used for importing and exporting certificate chains in Microsoft IIS (Windows).
Convert pem to pkcs7
Use this command if you want to add PEM certificates (domain.crt and ca-chain.crt) to a PKCS7 file (domain.p7b):
Note that you can use one or more -certfile options to specify which certificates to add to the PKCS7 file.
PKCS7 files, also known as P7B, are typically used in Java Keystores and Microsoft IIS (Windows). They are ASCII files which can contain certificates and CA certificates.
Convert pkcs7 to pem
Use this command if you want to convert a PKCS7 file (domain.p7b) to a PEM file:
Note that if your PKCS7 file has multiple items in it (e.g. a certificate and a CA intermediate certificate), the PEM file that is created will contain all of the items in it.
Create a private key
Use this command to create a password-protected, 2048-bit private key (domain.key):
Enter a password when prompted to complete the process.
Decrypt a private key
This takes an encrypted private key (encrypted.key) and outputs a decrypted version of it (decrypted.key):
Enter the pass phrase for the encrypted key when prompted.
Encrypt a private key
This takes an unencrypted private key (unencrypted.key) and outputs an encrypted version of it (encrypted.key):
Enter your desired pass phrase, to encrypt the private key with.
Generate a csr from an existing certificate and private key
Use this method if you want to renew an existing certificate but you or your CA do not have the original CSR for some reason. It basically saves you the trouble of re-entering the CSR information, as it extracts that information from the existing certificate.
This command creates a new CSR (domain.csr) based on an existing certificate (domain.crt) and private key (domain.key):
The -x509toreq option specifies that you are using an X509 certificate to make a CSR.
Generate a csr from an existing private key
Use this method if you already have a private key that you would like to use to request a certificate from a CA.
This command creates a new CSR (domain.csr) based on an existing private key (domain.key):
Answer the CSR information prompt to complete the process.
The -key option specifies an existing private key (domain.key) that will be used to generate a new CSR. The -new option indicates that a CSR is being generated.
Generate a self-signed certificate from an existing private key
Use this method if you already have a private key that you would like to generate a self-signed certificate with it.
This command creates a self-signed certificate (domain.crt) from an existing private key (domain.key):
Answer the CSR information prompt to complete the process.
The -x509 option tells req to create a self-signed certificate. The -days 365 option specifies that the certificate will be valid for 365 days. The -new option enables the CSR information prompt.
Generate a self-signed certificate from an existing private key and csr
Use this method if you already have a private key and CSR, and you want to generate a self-signed certificate with them.
This command creates a self-signed certificate (domain.crt) from an existing private key (domain.key) and (domain.csr):
The -days 365 option specifies that the certificate will be valid for 365 days.
Generating csrs
This section covers OpenSSL commands that are related to generating CSRs (and private keys, if they do not already exist). CSRs can be used to request SSL certificates from a certificate authority.
Keep in mind that you may add the CSR information non-interactively with the -subj option, mentioned in the previous section.
Generating ssl certificates
If you would like to use an SSL certificate to secure a service but you do not require a CA-signed certificate, a valid (and free) solution is to sign your own certificates.
Openssl version
The openssl version command can be used to check which version you are running. The version of OpenSSL that you are running, and the options it was compiled with affect the capabilities (and sometimes the command line options) that are available to you.
The following command displays the OpenSSL version that you are running, and all of the options that it was compiled with:
openssl version -a
This guide was written using an OpenSSL binary with the following details (the output of the previous command):
OpenSSL 1.1.1 11 Sep 2021
built on: Mon Aug 23 17:02:39 2021 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-Flav1L/openssl-1.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
Pem (.pem, .crt, .cer) в pfx
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile more.crt
Разбивая команду:
openssl– команда для запуска OpenSSLpkcs12– файловая утилита для файлов PKCS # 12 в OpenSSL-export -out certificate.pfx– экспортировать и сохранить файл PFX как certificate.pfx-inkey privateKey.key– используйте файл закрытого ключа privateKey.key в качестве закрытого ключа для объединения с сертификатом.-in certificate.crt– используйте certificate.crt в качестве сертификата, с которым будет объединен закрытый ключ.-certfile more.crt– Это необязательно, это если у вас есть какие-либо дополнительные сертификаты, которые вы хотите включить в файл PFX.
После ввода команды вам будет предложено ввести и подтвердить пароль экспорта для защиты файла PFX. Запомни этот пароль! Он понадобится вам, когда вы захотите экспортировать сертификаты и ключ.
Pkcs # 7 / p7b (.p7b, .p7c) в pfx
Файлы P7B нельзя использовать для непосредственного создания файла PFX. Файлы P7B должны быть преобразованы в PEM. После преобразования в PEM выполните описанные выше шаги, чтобы создать файл PFX из файла PEM.
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.crt
Разбивая команду:
openssl– команда для запуска OpenSSLpkcs7– файловая утилита для файлов PKCS # 7 в OpenSSL-print_certs -in certificate.p7b– распечатывает все сертификаты или CRL, содержащиеся в файле.-out certificate.crt– вывести файл как certificate.crt
Private keys
This section covers OpenSSL commands that are specific to creating and verifying private keys.
Verify a certificate was signed by a ca
Use this command to verify that a certificate (domain.crt) was signed by a specific CA certificate (ca.crt):
Verify a private key
Use this command to check that a private key (domain.key) is a valid key:
If your private key is encrypted, you will be prompted for its pass phrase. Upon success, the unencrypted key will be output on the terminal.
Verify a private key matches a certificate and csr
Use these commands to verify if a private key (domain.key) matches a certificate (domain.crt) and CSR (domain.csr):
If the output of each command is identical there is an extremely high probability that the private key, certificate, and CSR are related.
View certificate entries
This command allows you to view the contents of a certificate (domain.crt) in plain text:
View certificates
Certificate and CSR files are encoded in PEM format, which is not readily human-readable.
This section covers OpenSSL commands that will output the actual entries of PEM-encoded files.
View csr entries
This command allows you to view and verify the contents of a CSR (domain.csr) in plain text:
Генерация csr запроса через openssl
Генерация CSR-запроса должна проходить в строгом соответствии со следующими правилами. Во-первых, вся информация должна быть приведена на английском языке. Во-вторых, следует избегать использования следующих символов: < > ~ ! @ # $ % ^ * / ( ) ?.,&.
Поля для заполнения будут следующими:
- Country Name – ISO-кодстраны
- State or Province Name – область, где была проведена официальная регистрация компании
- Locality Name – город, где была проведена официальная регистрация компании
- Organization Name – полное название организации (без сокращений)
- Organizational Unit Name – название отдела организации
- Common Name – полное доменное имя сервера
Сгенерировать CSR-запрос в OpenSSL можно при помощи специальной команды:
openssl req -key -new cert.key -out cert.csr
Имя домена, на который совершается запрос, указывается в Common Name. Поля «A challenge password» и «An optional company name» заполнять не нужно (просто жмем enter).
Команда для создания ключа:
openssl req -batch -new -noout -newkey rsa:2048 -nodes -keyout cert.key
В случае потери пароля или файла ключа надо будет заказывать повторное создание сертификата.
Одновременное создание ключа и запроса с данными:
Другие полезные команды для работы с сертификатами в openssl
Уточнить длину запроса:
Как выпустить самоподписанный ssl сертификат и заставить ваш браузер доверять ему

Все крупные сайты давно перешли на протокол https. Тенденция продолжается, и многие наши клиенты хотят, чтобы их сайт работал по защищенному протоколу. А если разрабатывается backend для мобильного приложения, то https обязателен. Например, Apple требует, чтобы обмен данными сервера с приложением велся по безопасному протоколу. Это требование введено с конца 2021 года.
На production нет проблем с сертификатами. Обычно хостинг провайдер предоставляет удобный интерфейс для подключения сертификата. Выпуск сертификата тоже дело не сложное. Но во время работы над проектом каждый разработчик должен позаботиться о сертификате сам.
В этой статье я расскажу, как выпустить самоподписанный SSL сертификат и заставить браузер доверять ему.
Чтобы выпустить сертификат для вашего локального домена, понадобится корневой сертификат. На его основе будут выпускаться все остальные сертификаты. Да, для каждого нового top level домена нужно выпускать свой сертификат. Получить корневой сертификат достаточно просто.
Сначала сформируем закрытый ключ:
openssl genrsa -out rootCA.key 2048Затем сам сертификат:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pemНужно будет ввести
страну
,
город
,
компанию
и т.д. В результате получаем два файла:
rootCA.key
и
rootCA.pem
Переходим к главному, выпуск самоподписанного сертификата. Так же как и в случае с корневым, это две команды. Но параметров у команд будет значительно больше. И нам понадобится вспомогательный конфигурационный файл. Поэтому оформим все это в виде bash скрипта create_certificate_for_domain.sh
Первый параметр обязателен, выведем небольшую инструкцию для пользователя.
if [ -z "$1" ]
then
echo "Please supply a subdomain to create a certificate for";
echo "e.g. mysite.localhost"
exit;
fiСоздадим новый приватный ключ, если он не существует или будем использовать существующий:
if [ -f device.key ]; then
KEY_OPT="-key"
else
KEY_OPT="-keyout"
fiЗапросим у пользователя название домена. Добавим возможность задания “общего имени” (оно используется при формировании сертификата):
DOMAIN=$1
COMMON_NAME=${2:-$1}Чтобы не отвечать на вопросы в интерактивном режиме, сформируем строку с ответами. И зададим время действия сертификата:
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=999В переменной SUBJECT перечислены все те же вопросы, который задавались при создании корневого сертификата (
страна
,
город
,
компания
и т.д). Все значение, кроме CN можно поменять на свое усмотрение.
Сформируем csr файл (Certificate Signing Request) на основе ключа. Подробнее о файле запроса сертификата можно почитать в этой статье.
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csrФормируем файл сертификата
. Для этого нам понадобится вспомогательный файл с настройками. В этот файл мы запишем домены, для которых будет валиден сертификат и некоторые другие настройки. Назовем его
v3.ext
. Обращаю ваше внимание, что это отдельный файл, а не часть bash скрипта.
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
DNS.2 = *.%%DOMAIN%%Да, верно, наш сертификат будет валидным для основного домена, а также для всех поддоменов. Сохраняем указанные выше строки в файл
v3.ext
Возвращаемся в наш bash скрипт. На основе вспомогательного файла v3.ext создаем временный файл с указанием нашего домена:
cat v3.ext | sed s/%%DOMAIN%%/$COMMON_NAME/g > /tmp/__v3.extВыпускаем сертификат:
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.extПереименовываем сертификат и удаляем временный файл:
mv device.csr $DOMAIN.csr
cp device.crt $DOMAIN.crt
# remove temp file
rm -f device.crt;Скрипт готов. Запускаем его:
./create_certificate_for_domain.sh mysite.localhostПолучаем два файла:
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
Сначала выполните команду, показанную ниже, чтобы создать и сохранить свой закрытый ключ.
Этот закрытый ключ необходим для подписи вашего SSL-сертификата.
Вы можете изменить my_key в приведенной ниже команде на свое собственное значение.
$ sudo openssl genrsa -out my_key.key
Вот что означают флаги команды:
- genrsa Создать закрытый ключ RSA
- -out Выходной файл
Если вы не указали другое местоположение, ваш закрытый ключ будет храниться в текущем рабочем каталоге.
Как создать запрос на подпись сертификата
Следующим шагом является создание запроса на подпись сертификата (CSR).
CSR – это то, что вы обычно отправляете в УЦ.
Но в этом случае вы собираетесь подписать его самостоятельно.
При создании CSR вас попросят предоставить некоторую информацию.
Некоторые поля можно оставить пустыми, нажав клавишу ETCD_CLIENT_CERT_AUTH
Теперь запустите команду, показанную ниже, чтобы начать создание CSR.
$ sudo openssl req -new -key my_key.key -out my_csr.csr
Вот что обозначает каждый флаг команды
- req Сделать запрос на подпись сертификата
- -new Новый запрос
- -key Путь, где хранится ваш файл закрытого ключа
- -out Выходной файл
Подпишем сертификат самостоятельно
Когда вы запустите команду, показанную ниже, будет создан самоподписанынй сертификат, который будет действителен в течение 365 дней.
$ openssl x509 -req -days 365 -in my_csr.csr -signkey my_key.key -out my_cert.crt
Предпосылки
Машина Linux и пользователь с привилегиями sudo.
Проверим сертификат
Вы можете проверить детали сертификата в текстовом формате с помощью команды:
openssl x509 -text -noout -in my_cert.crt
Проверка закрытого ключа
openssl rsa -in adgrafics.key -check
Процесс установки ssl сертификата
Процесс установки сертификата осуществляется при помощи следующих шагов.
Скопируйте выданный вам сертификат в файл, расположенный на вашем сервере Apache
После выпуска SSL-сертификата, на почтовый адрес, который вы задали, поступит электронное письмо, которое будет содержать в себе ваш сертификат. Файл с сертификатом будет называться domain.crt. Открыв файл с SSL сертификатом в обычном текстовом редакторе, вы увидите следующее (примерно):
—–BEGIN CERTIFICATE—–ASb-SdGSIk3DqvPAqCAMIACAQSxALBgkqddhgrtkiG9w0BBwGg&KLPmowggHXAhUb7egest5u0M63v1Z2A/kFghj5CSqGSIb3DQBAs klMF8xCzAnbijNByhTMd54vSA(…….)E cFEGjgrHJgrA eRP6XraWw8iiguUtfgrrcJgg4P6XVS4l39 l5aCEGGbauLP5W6K99orhIhgQrlX2 KeDi xBG2coigehIGFeQS/16S36ITcluHGY5EA &A5ujbhgrYHS—–END CERTIFICATE—–
Скопируйте данный сертификат туда же (в ту же директорию), где лежит ваш частный (приватный) ключ, назовем этот каталог /etc/ssl/crt/. В нашей ситуации приватный ключ – это private.key. Публичным ключом будет выступать domain.crt.
Задайте корневой и промежуточный сертификат
Очень важный пункт. Чтобы заслужить доверие браузеров и различных мобильных устройств к вашему SSL-сертификату, вам нужно будет задать сертификаты корневых и промежуточных ЦС (центров сертификации). Такие сертификаты обычно лежат вместе с файлом Вашего главного сертификата. Для Apache их надо объединить в ca_bundle.
Чтобы ссылка на данный файл была корректной, следует произвести следующее в необходимом разделе Virtual Host для вашего веб-сайта:
Сгенерировать запрос подписи сертификата (csr) для существующего закрытого ключа
openssl req -out adgrafics.csr -key adgrafics.key -new
Снятие пароль passphrase в private key
openssl rsa -in private.key -out private.key .nopass
Создадим самоподписанный сертификат ssl с помощью openssl
Убедившись, что инструмент OpenSSL установлен на вашем компьютере с Linux, вы можете приступить к созданию сертификата.
Информация CSR требуется для создания закрытого ключа.
Поскольку мы генерируем самоподписанный сертификат, на самом деле не требуется выводить файл CSR, поскольку он требуется только в том случае, если вы отправляете информацию CSR в сторонний удостоверяющий центр.
Чтобы создать самоподписанный сертификат SSL, введите:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout my_key.key -out my_cert.crtЭта команда создаст самоподписанный сертификат, который будет действителен в течение 365 дней.
Сертификат и файл ключа будут созданы в текущем каталоге, если явно не указан другой каталог.
Вот что обозначает каждый флаг:
- req – сделать запрос на подпись сертификата
- -newkey rsa: 4096 – Создает ключ RSA длиной 4096 бит. Если не указано иное, по умолчанию будет создан ключ длиной 2048 бит.
- -keyout – имя файла закрытого ключа, в котором будет храниться ключ
- -out – указывает имя файла для хранения нового сертификата
- -nodes – пропустить шаг по созданию сертификата с парольной фразой.
- -x509 – Создать сертификат формата X.509.
- -days – количество дней, в течение которых сертификат действителен
Поля CSR:
- C = – Название страны. (двухбуквенный код).
- ST = – Название штата или провинции.
- L = – Название населенного пункта.
- O = – полное название вашей организации.
- OU = – Название организационной единицы.
- CN = – полное доменное имя.
Создадим самоподписанный сертификат, используя существующий закрытый ключ и csr
В некоторых ситуациях, когда у вас есть закрытый ключ и csr, будет достаточно следующих шагов.
Создание (генерация) запроса csr
openssl req -new -key adgrafics.key -out adgrafics.csr
Создание (генерация) приватного ключа pkey
openssl genrsa -des3 -out adgrafics.key 2048
Создание сертификатов с помощью программы openssl
1. Выберем каталог для хранения ключей и сертификатов и назначим необходимый уровень доступа.
# mkdir /root/ca
# cd /root/ca
# mkdir certs crl newcerts private
# chmod 700 private
# touch index.txt
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
Email Address []:dit@kraftec.net
Для создания сертификата SSL для Captive портала и Веб-консоли необходимо создать файл конфигурации
Создадим конфигурационный файл для OpenSSL.
# touch /root/ca/openssl.cnf
Добавим в данный файл следующие блоки
##########################################################################
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /root/ca
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $certs/ca.crt
private_key = $dir/private/ca_key.pem
serial = $dir/serial
crlnumber = $dir/crlnumber
crl = $dir/crl/crl.pem
RANDFILE = $dir/private/.rand
x509_extensions = usr_cert
name_opt = ca_default
cert_opt = ca_default
crl_extensions = crl_ext
default_days = 365
default_crl_days= 30
default_md = sha256
preserve = no
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
string_mask = utf8only
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = NSO
localityName = Locality Name (eg, city)
localityName_default = Novosibirsk
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Kraftec
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = server
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
subjectAltName=DNS:auth.kraftec.net, DNS:logout.kraftec.net, DNS:block.kraftec.net, DNS:ftpclient.kraftec.net, DNS:sslvpn.kraftec.net
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ crl_ext ]
authorityKeyIdentifier=keyid:always
##########################################################################
Сгенерируем ключ для 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
Email Address []:dit@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
Вывод команды
Signature ok
subject=/C=RU/ST=NSO/L=Novosibirsk/O=Kraftec/CN=auth.kraftec.net/emailAddress=dit@kraftec.net
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
Email Address []:dit@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
Вывод команды
Signature ok
subject=/C=RU/ST=NSO/L=Novosibirsk/O=Kraftec/CN=utm.kraftec.net/emailAddress=dit@kraftec.net
Getting CA Private Key
Импортируем данные сертификаты и приватные ключи в UserGate в раздел сертификаты.
Сертификату ca.crt назначим роль SSL дешифрование
Сертификату Captive.crt назначим роль SSL captive-портала
Сертификату Web.crt назначим роль SSL веб-консоли
На компьютеры пользователей установим сертификат ca.crt в хранилище Доверенные корневые центры сертификации.
Требования
Команды ниже демонстрируют примеры того, как создать файл .pfx / .p12 в командной строке с помощью OpenSSL:
Установка openssl
OpenSSL доступен по умолчанию во всех основных дистрибутивах Linux.
Выполните приведенную ниже команду, чтобы убедиться, что OpenSSL уже установлен на вашем компьютере с Linux.
$ openssl version
Если вы не видите вывода, показывающего подробную информацию о версии OpenSSL, выполните следующую команду, чтобы установить OpenSSL.
Conclusion
That should cover how most people use OpenSSL to work with SSL certs. It has many other uses that were not covered here, so feel free to ask or suggest other uses in the comments.
If you are having issues with any of the commands, be sure to comment (and include your OpenSSL version output).
Заключение
В этом руководстве мы описали, как создать самоподписанный сертификат SSL с помощью инструмента openssl.
Учитывая, что основные браузеры не доверяют самоподписанным сертификатам, рекомендуется использовать его только для внутренних целей или в целях тестирования.
