Машина на Linux с установленными утилитами OpenSSL и JRE (Java Runtime Environment) или JDK (Java Development Kit). Допускается проводить нижеуказанные операции на том же сервере на который планируется устанавливать бэкенд-часть Dion Rooms.
Если вы уже имеете в распоряжении файлы ключа и сертификата (например, сертификат выпущен удостоверяющим центром вашей организации), шаги 6 и 7 можно применить и к ним. Соответственно, если вы получили сертификат сразу в формате PKCS12, вам достаточно выполнить только шаг 7.
Сначала создадим закрытый ключ. Закрытый ключ помогает включить шифрование и является наиболее важным компонентом нашего сертификата.
Создадим защищенный паролем 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
из команды.
Если мы хотим, чтобы наш сертификат был подписан, нам нужен запрос на подпись сертификата (CSR). CSR включает в себя открытый ключ и некоторую дополнительную информацию (например, организацию и страну).
Создадим CSR (domain.csr
) из нашего существующего закрытого ключа:
openssl req -key domain.key -new -out domain.csr
Введём пароль нашего закрытого ключа и некоторую информацию CSR, чтобы завершить процесс. Основные поля которые нам следует заполнить это Country Name
, State or Province Name
, Organization Name
, Common Name
. Остальные можно оставить пустыми.
Поле Common name
является обязательным, его значение должно быть точным полным доменным именем (FQDN) нашего домена. Результат будет выглядеть примерно так:
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 []:
Важным полем является Common name
, которое должно быть точным полным доменным именем (FQDN) нашего домена
Challenge password
и optional company name
можно оставить пустыми.
Если мы хотим, чтобы наш закрытый ключ был незашифрованным, мы можем добавить опцию -nodes
:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Создадим самоподписанный сертификат ( domain.crt ) с нашим существующим закрытым ключом и CSR:
openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt
Опция -days
указывает количество дней, в течение которых сертификат будет действителен.
Cоздадим закрытый ключ (rootCA.key
) и самоподписанный корневой сертификат CA (rootCA.crt
):
openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt
Если в предыдущих шагах создавался незашифрованный ключ то нужно добавить опцию -nodes
перед -days
.
Создадим текстовый файл конфигурации (domain.ext
) со следующим содержимым:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = domain
Поле DNS.1
должно быть доменом (DNS-именем) назначенным для сервера на котором размещается бэкенд Dion Rooms.
Затем мы можем подписать наш 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
.
Мы воспользуемся следующей командой, чтобы получить наш закрытый ключ и сертификат, а затем объединить их в файл PKCS12:
openssl pkcs12 -inkey domain.key -in domain.crt -export -out domain.pfx
Последний шаг — конвертировать формат 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.
Для создания fullchain цепочки сертификатов необходимо объединить сертификат сервера и корневой сертификат в один файл.
Сделать это можно использовав команду
cat domain.crt rootCA.crt > fullchain.crt
На выходе будет получен fullchain.crt
Мы можем использовать команду 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
Для просмотра полного содержимого файла JKS (cert.jks
в нашем примере) можно использовать следующую команду:
keytool -v -list -keystore cert.jks