Машина на Linux с установленными утилитами OpenSSL и JRE (Java Runtime Environment) или JDK (Java Development Kit). Допускается проводить нижеуказанные операции на том же сервере на который планируется устанавливать backend-часть Dion Rooms.
| Если вы уже имеете в распоряжении файлы ключа и сертификата (например, сертификат выпущен удостоверяющим центром вашей организации), шаги 6 и 7 можно применить и к ним. Соответственно, если вы получили сертификат сразу в формате PKCS12, вам достаточно выполнить только шаг 7. |
1. Создайте закрытый ключ.
Закрытый ключ помогает включить шифрование и является наиболее важным компонентом нашего сертификата.
a. Чтобы создать защищенный паролем 2048-битный закрытый ключ RSA (domain.key), выполните команду:
openssl genrsa -des3 -out domain.key 2048
b. Введите пароль, когда будет предложено. Результат будет выглядеть так:
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 из команды.
2. Создайте запрос на подпись сертификата.
Чтобы сертификат был подписан, нужен запрос на подпись сертификата (CSR). CSR включает в себя открытый ключ и некоторую дополнительную информацию (например, организацию и страну).
a. Создайте CSR (domain.csr) из существующего закрытого ключа с помощью команды:
openssl req -key domain.key -new -out domain.csr
b. Введите пароль закрытого ключа и некоторую информацию CSR, чтобы завершить процесс. Заполните основные следующие поля: Country Name, State or Province Name, Organization Name, Common Name. Остальные можно оставить пустыми. Поле Common name является обязательным, его значение должно быть точным полным доменным именем (FQDN) вашего домена. Поля Challenge password и optional company name также можно оставить пустыми.
Например:
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]:state
Locality Name (eg, city) []:city
Organization Name (eg, company) [Internet Widgits Pty Ltd]:company
Organizational Unit Name (eg, section) []:section
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 []:
Чтобы закрытый ключ был незашифрованным, добавьте опцию -nodes :
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
3. Создайте самоподписанный сертификат (domain.crt) с существующим закрытым ключом и CSR:
openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt
Опция -days указывает количество дней, в течение которых сертификат будет действителен.
4. Создайте самоподписанный корневой центр сертификации. Для этого создайте закрытый ключ (rootCA.key) и самоподписанный корневой сертификат CA (rootCA.crt):
openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt
Если в предыдущих шагах создавался незашифрованный ключ, то добавьте опцию -nodesперед -days.
5. Подпишите CSR с помощью корневого центра сертификации.
a. Создайте текстовый файл конфигурации (domain.ext) со следующим содержимым:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain
В поле DNS.1 укажите домен (DNS-имя), назначенный для сервера на котором размещается Dion Rooms backend.
b. Затем подпишите CSR (domain.csr) с помощью сертификата корневого центра сертификации и его закрытого ключа:
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 365 -CAcreateserial -extfile domain.ext
В результате сертификат, подписанный центром сертификации, будет находиться в файле domain.crt.
6. Преобразуйте PEM в PKCS12.
Чтобы получить закрытый ключ и сертификат, а затем объединить их в файл PKCS12, выполните команду:
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx
7. Преобразуйте формат PKCS12 в JKS с помощью команды:
keytool -importkeystore -srckeystore domain.pfx -srcstoretype pkcs12 -destkeystore cert.jks
В процессе выполнения команды будет запрошен новый пароль для файла cert.jks:
Enter destination keystore password:
Если был установлен пароль domain.pfx, то он будет запрошен (пароль может быть пустым):
Enter source keystore password:
Результат будет выглядеть следующим образом:
Entry for alias certificate successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Результатом является хранилище ключей cert.jks, хранящееся в формате JKS.
8. Создайте fullchain-цепочку сертификатов.
Чтобы создать fullchain-цепочку сертификатов, объедините сертификат сервера и корневой сертификат в один файл с помощью команды:
cat domain.crt rootCA.crt > fullchain.crt
Результатом является файл fullchain.crt.
Чтобы просмотреть содержимое сертификата в виде обычного текста, используйте команду:
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
Чтобы просмотреть полное содержимое файла JKS (cert.jks в этом примере), используйте следующую команду:
keytool -v -list -keystore cert.jks