Перейти к основному содержимому

Создание самоподписанного сертификата с OpenSSL

· 6 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

1. Обзор

OpenSSL — это инструмент командной строки с открытым исходным кодом, который позволяет пользователям выполнять различные задачи, связанные с SSL.

В этом руководстве мы узнаем , как создать самозаверяющий сертификат с помощью OpenSSL .

2. Создание закрытого ключа

Сначала мы создадим закрытый ключ. Закрытый ключ помогает включить шифрование и является наиболее важным компонентом нашего сертификата.

Давайте создадим защищенный паролем 2048-битный закрытый ключ RSA ( domain.key ) с помощью команды openssl :

openssl genrsa -des3 -out domain.key 2048

Мы введем пароль при появлении запроса. Вывод будет выглядеть так:

Generating RSA private key, 2048 bit long modulus (2 primes)
.....................+++++
.........+++++
e is 65537 (0x010001)
Enter pass phrase for domain.key:
Verifying - Enter pass phrase for domain.key:

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

3. Создание запроса на подпись сертификата

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

Давайте создадим CSR ( domain.csr ) из нашего существующего закрытого ключа:

openssl req -key domain.key -new -out domain.csr

Мы введем пароль нашего закрытого ключа и некоторую информацию CSR, чтобы завершить процесс. Вывод будет выглядеть так:

Enter pass phrase for domain.key:
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]:AU
State or Province Name (full name) [Some-State]:stateA
Locality Name (eg, city) []:cityA
Organization Name (eg, company) [Internet Widgits Pty Ltd]:companyA
Organizational Unit Name (eg, section) []:sectionA
Common Name (e.g. server FQDN or YOUR name) []:domain
Email Address []:email@email.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Важным полем является « Общее имя», которое должно быть точным полным доменным именем (FQDN) нашего домена.

« Проверочный пароль » и « Необязательное название компании » можно оставить пустыми.

Мы также можем создать как закрытый ключ, так и CSR с помощью одной команды :

openssl req -newkey rsa:2048 -keyout domain.key -out domain.csr

Если мы хотим, чтобы наш закрытый ключ не был зашифрован, мы можем добавить параметр -nodes :

openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

4. Создание самозаверяющего сертификата

Самозаверяющий сертификат — это сертификат, подписанный собственным закрытым ключом . Его можно использовать для шифрования данных так же, как и сертификаты, подписанные ЦС, но нашим пользователям будет показано предупреждение о том, что сертификат не является доверенным.

Давайте создадим самозаверяющий сертификат ( domain.crt ) с нашим существующим закрытым ключом и CSR:

openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

Параметр -days указывает количество дней, в течение которых сертификат будет действителен.

Мы можем создать самозаверяющий сертификат, используя только закрытый ключ:

openssl req -key domain.key -new -x509 -days 365 -out domain.crt

Эта команда создаст временный CSR . Конечно, у нас все еще есть информационная подсказка CSR.

Мы даже можем создать закрытый ключ и самозаверяющий сертификат с помощью всего одной команды:

openssl req -newkey rsa:2048 -keyout domain.key -x509 -days 365 -out domain.crt

5. Создание сертификата, подписанного ЦС, с нашим собственным ЦС

Мы можем быть нашим собственным центром сертификации (ЦС), создав самозаверяющий корневой сертификат ЦС, а затем установив его как доверенный сертификат в локальном браузере.

5.1. Создайте самоподписанный корневой ЦС

Давайте создадим закрытый ключ ( rootCA.key ) и самоподписанный корневой сертификат CA ( rootCA.crt ) из командной строки:

openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt

5.2. Подпишите наш CSR с корневым центром сертификации

Сначала мы создадим текстовый файл конфигурации ( domain.ext ) со следующим содержимым:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain

Поле « DNS.1 » должно быть доменом нашего сайта.

Затем мы можем подписать наш CSR ( domain.csr ) корневым сертификатом CA и его закрытым ключом:

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 365 -CAcreateserial -extfile domain.ext

В результате сертификат, подписанный ЦС, окажется в файле domain.crt .

6. Просмотр сертификатов

Мы можем использовать команду openssl для просмотра содержимого нашего сертификата в виде простого текста:

openssl x509 -text -noout -in domain.crt

Вывод будет выглядеть так:

Certificate:
Data:
Version: 1 (0x0)
Serial Number:
64:1a:ad:0f:83:0f:21:33:ff:ac:9e:e6:a5:ec:28:95:b6:e8:8a:f4
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = AU, ST = stateA, L = cityA, O = companyA, OU = sectionA, CN = domain, emailAddress = email@email.com
Validity
Not Before: Jul 12 07:18:18 2021 GMT
Not After : Jul 12 07:18:18 2022 GMT
Subject: C = AU, ST = stateA, L = cityA, O = companyA, OU = sectionA, CN = domain, emailAddress = email@email.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:a2:6a:2e:a2:17:68:bd:83:a1:17:87:d8:9c:56:
ab:ac:1f:1e:d3:32:b2:91:4d:8e:fe:4f:9c:bf:54:
aa:a2:02:8a:bc:14:7c:3d:02:15:a9:df:d5:1b:78:
17:ff:82:6b:af:f2:21:36:a5:ad:1b:6d:67:6a:16:
26:f2:a9:2f:a8:b0:9a:44:f9:72:de:7a:a0:0a:1f:
dc:67:b0:4d:a7:f4:ea:bd:0e:83:7e:d2:ea:15:21:
6d:8d:18:65:ed:f8:cc:6a:7f:83:98:e2:a4:f4:d6:
00:b6:ed:69:95:4e:0d:59:ee:e8:3f:e7:5a:63:24:
98:d1:4b:a5:c9:14:a5:7d:ef:06:78:2e:08:25:3c:
fd:05:0c:67:ce:70:5d:34:9b:c4:12:e6:e3:b1:04:
6a:db:db:e9:47:31:77:80:4f:09:5e:25:73:75:e4:
57:36:34:f8:c3:ed:a2:21:57:0e:e3:c1:5c:fc:d9:
f2:a3:b1:d9:d9:4f:e2:3e:ad:21:77:20:98:ed:15:
39:99:1b:7e:29:60:14:eb:76:8b:8b:72:16:b1:68:
5c:10:51:27:fa:41:49:c5:b7:c4:79:69:5e:28:a2:
c3:55:ac:e8:05:0f:4b:4a:bd:4b:2c:8b:7d:92:b0:
2d:b3:1a:de:9f:1a:5b:46:65:c6:33:b2:2e:7a:0c:
b0:2f
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
58:c0:cd:df:4f:c1:0b:5c:50:09:1b:a5:1f:6a:b9:9a:7d:07:
51:ca:43:ec:ba:ab:67:69:c1:eb:cd:63:09:33:42:8f:16:fe:
6f:05:ee:2c:61:15:80:85:0e:7a:e8:b2:62:ec:b7:15:10:3c:
7d:fa:60:7f:ee:ee:f8:dc:70:6c:6d:b9:fe:ab:79:5d:1f:73:
7a:6a:e1:1f:6e:c9:a0:ae:30:b2:a8:ee:c8:94:81:8e:9b:71:
db:c7:8f:40:d6:2d:4d:f7:b4:d3:cf:32:04:e5:69:d7:31:9c:
ea:a0:0a:56:79:fa:f9:a3:fe:c9:3e:ff:54:1c:ec:96:1c:88:
e5:02:d3:d0:da:27:f6:8f:b4:97:09:10:33:32:87:a8:1f:08:
dc:bc:4c:be:6b:cc:b9:0e:cf:18:12:55:17:44:47:2e:9c:99:
99:3c:96:60:12:c6:fe:b0:ee:01:97:54:20:b0:13:51:4f:ee:
1d:c0:3d:1a:30:aa:79:30:12:e2:4f:af:13:85:f8:c8:1e:f5:
28:7c:55:66:66:10:f4:0a:69:c0:55:8a:9a:c7:eb:ec:15:f0:
ef:bd:c1:d2:47:43:34:72:71:d2:c3:ff:f0:a3:c1:2c:63:56:
f2:f5:cf:91:ec:a1:c0:1f:5d:af:c0:8e:7a:02:fe:08:ba:21:
68:f2:dd:bd

7. Преобразование форматов сертификатов

Наш сертификат ( domain.crt ) — это сертификат X.509, закодированный в ASCII PEM . Мы можем использовать OpenSSL для преобразования его в другие форматы для многоцелевого использования.

7.1. Преобразовать PEM в DER

Формат DER обычно используется с Java. Давайте преобразуем наш сертификат с кодировкой PEM в сертификат с кодировкой DER:

openssl x509 -in domain.crt -outform der -out domain.der

7.2. Преобразование PEM в PKCS12

Файлы PKCS12, также известные как файлы PFX, обычно используются для импорта и экспорта цепочек сертификатов в Microsoft IIS.

Мы будем использовать следующую команду, чтобы взять наш закрытый ключ и сертификат, а затем объединить их в файл PKCS12:

openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx

8. Заключение

В этой статье мы узнали, как с нуля создать самоподписанный сертификат с OpenSSL , просмотреть этот сертификат и преобразовать его в другие форматы . Мы надеемся, что эти вещи помогут вам в вашей работе.