add ssl
parent
905705174e
commit
f76f760984
|
@ -0,0 +1,212 @@
|
|||
# Создание самоподписного сертификата для локального домена
|
||||
|
||||
В системе необходимо наличие пакета `openssl`
|
||||
|
||||
Debian - `sudo apt install openssl`
|
||||
|
||||
***
|
||||
|
||||
## Простой путь
|
||||
|
||||
Генерируется самоподписный wildcard сертификат для одного домена. Чтобы браузеры доверяли этому сертификату, его необходимо добавить в доверенные.
|
||||
|
||||
### Подготовительный этап
|
||||
|
||||
Создадим директорию в которой будут созданы ключ и сертификат
|
||||
|
||||
```bash
|
||||
mkdir /home/$USER/cert && cd /home/$USER/cert
|
||||
```
|
||||
|
||||
### Создаём ключ SSL и файлы сертификата
|
||||
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/$USER/cert/astra.lan.key -out /home/$USER/cert/astra.lan.crt
|
||||
```
|
||||
|
||||
`req -x509` - указывает, что мы хотим использовать управление запросами на подписание сертификатов X.509 (CSR). X.509 — это инфраструктура открытых ключей, используемая стандартами SSL и TLS для управления ключами и сертификатами;
|
||||
`-nodes` - предписывает OpenSSL пропустить опцию защиты нашего сертификата кодовой фразой;
|
||||
`-days 365` - эта опция устанавливает период действия сертификата. Здесь мы устанавливаем срок действия в один год. Многие современные браузеры отклоняют любые сертификаты, срок действия которых превышает один год;
|
||||
`-newkey rsa:2048` - указывает, что мы хотим сгенерировать новый сертификат и новый ключ одновременно. Мы не создали требуемый ключ для подписи сертификата на предыдущем шаге, и поэтому нам нужно создать его вместе с сертификатом. Часть rsa:2048 предписывает создать ключ RSA длиной 2048 бит;
|
||||
`-keyout` - эта строка указывает OpenSSL, где разместить генерируемый файл закрытого ключа;
|
||||
`-out` - указывает OpenSSL, где разместить создаваемый сертификат.
|
||||
|
||||
Далее необходимо ответить на вопросы. Наиболее важная строка `Common Name`. Нужно ввести имя узла, которое будее использоваться для доступа к серверу. Чтобы иметь возможность использования сертификата в поддоменах, необходимо в имени указать маску поддоменов - `*.`. Например Common name для wildcard сертификата для домена astra.lan будет выглядеть так - `*.astra.lan`.
|
||||
|
||||
***
|
||||
|
||||
## Путь сложнее - для нескольких сертификатов
|
||||
|
||||
Если стоит задача сгенерировать несколько сертификатов для разных доменов, мы это можем сделать используя описанный выше простой путь, но, чтобы браузер не ругался на наши самоподписные сертификаты, каждый из них нужно добавить в исключения. Если таких сертификатов много, делать это долго и скучно.
|
||||
|
||||
Для решения такой задачи можно пойти другим путём:
|
||||
|
||||
- создать конревой сертификат;
|
||||
- на основе корневого сертификата создать промежуточные запросы на подписание сертификатов для каждого домена;
|
||||
- сегенерировать сертификаты для каждого домена, подписанные нашим корневым сертификатом;
|
||||
- добавить в исключения в браузер наш корневой сертификат.
|
||||
|
||||
### Подготовительный этап
|
||||
|
||||
```bash
|
||||
mkdir /home/$USER/cert && cd /home/$USER/cert
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
### Сформируем закрытый ключ
|
||||
|
||||
```bash
|
||||
openssl genrsa -out rootCA.key 2048
|
||||
```
|
||||
|
||||
`genrsa` - создать закрытый ключ RSA
|
||||
`-out` - выходной файл
|
||||
Получим файл: `rootCA.key`
|
||||
|
||||
### Создаем корневой сертификат с использованием сгенерированого ключа
|
||||
|
||||
```bash
|
||||
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 7200 -out rootCA.pem
|
||||
```
|
||||
|
||||
`-x509` – экземпляр сертификата;
|
||||
`-new` – новый запрос сертификата;
|
||||
`-nodes` – отключить шифрование выходного ключа;
|
||||
`-key rootCA.key` – файл ключа;
|
||||
`-sha256` – алгоритм подписи;
|
||||
`-days 7200` – период действия сертификата (в днях);
|
||||
`-out rootCA.pem` – имя сгенерированного сертификата.
|
||||
|
||||
Пример вывода:
|
||||
|
||||
```bash
|
||||
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]:Moscow
|
||||
Locality Name (eg, city) []:
|
||||
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Syssoft
|
||||
Organizational Unit Name (eg, section) []:
|
||||
Common Name (e.g. server FQDN or YOUR name) []:Private Astra Root Authority
|
||||
Email Address []:
|
||||
```
|
||||
|
||||
### Проверить содержание сгенерированного сертификата
|
||||
|
||||
```bash
|
||||
openssl x509 -text -noout -in rootCA.pem | head -15
|
||||
```
|
||||
|
||||
```bash
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number:
|
||||
6b:f5:ec:27:d9:85:4a:72:22:2d:72:c4:9d:1a:e1:3d:d1:1d:4b:10
|
||||
Signature Algorithm: sha256WithRSAEncryption
|
||||
Issuer: C = RU, ST = Moscow, O = Syssoft, CN = Private Astra Root Authority
|
||||
Validity
|
||||
Not Before: Oct 16 10:29:33 2023 GMT
|
||||
Not After : Jul 3 10:29:33 2043 GMT
|
||||
Subject: C = RU, ST = Moscow, O = Syssoft, CN = Private Astra Root Authority
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
RSA Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
```
|
||||
|
||||
### Убедиться в том, что был создан именно центр сертификации
|
||||
|
||||
```bash
|
||||
openssl x509 -text -noout -in rootCA.pem | grep CA
|
||||
```
|
||||
|
||||
```bash
|
||||
67:B4:4A:C3:6E:FF:72:4B:AD:A7:DA:C2:B4:57:35:DF:60:22:CA:E6
|
||||
keyid:67:B4:4A:C3:6E:FF:72:4B:AD:A7:DA:C2:B4:57:35:DF:60:22:CA:E6
|
||||
CA:TRUE
|
||||
```
|
||||
|
||||
Для использования созданного сертификата в качестве локального центра сертификации необходимо импортировать его на все доступные устройства. Корневой сертификат можно добавить в хранилище ключей/сертификатов ОС либо загрузить напрямую в браузер.
|
||||
|
||||
### Генерация сертификата для домена
|
||||
|
||||
#### Создание закрытого ключа для домена
|
||||
|
||||
```bash
|
||||
openssl genrsa -out astra.lan.key 2048
|
||||
```
|
||||
|
||||
#### Создаем запрос на сертификат (CSR)
|
||||
|
||||
CSR - обычно это та информация, которая отправляется в УЦ, но в нашем случае мы подписываем сертификат самостоятельно.
|
||||
|
||||
```bash
|
||||
openssl req -new -key astra.lan.key -out astra.lan-req.csr
|
||||
```
|
||||
|
||||
`-req` - создать запрос на подпись
|
||||
`-new` - новый запрос
|
||||
`-key` - путь к закрытому ключу
|
||||
`-out` - выходной файл
|
||||
|
||||
Вводим [Пример]:
|
||||
|
||||
```bash
|
||||
Country name [Страна]: RU
|
||||
State or Province Name (full name) [Край или область]: Moscow [можно пропустить]
|
||||
Locality Name (eg, city) [Населенный пункт]: [можно пропустить]
|
||||
Organization Name (eg, company) [Название организации]: Syssoft [можно пропустить]
|
||||
Organizational Unit Name [Отдел]: [можно пропустить]
|
||||
Common Name: [обычно указывается адрес сайта] *.astra.lan
|
||||
email: [можно пропустить]
|
||||
```
|
||||
|
||||
Вводим пароль [не обязательно].
|
||||
|
||||
Получим файл `org.csr` - содержащий информацию, необходимую для выпуска сертификата.
|
||||
|
||||
#### Выпускаем сертификат
|
||||
|
||||
```bash
|
||||
openssl x509 -req -in astra.lan-req.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out astra.lan.crt -days 999 -sha256
|
||||
```
|
||||
|
||||
`req` - создать запрос на подпись
|
||||
`in` - вводимый файл запроса
|
||||
`CA` - файл корневого сертификата
|
||||
`CAkey` - ключ корневого сертификата
|
||||
`out` - выходной crt-файл
|
||||
`days` - количество дней действия
|
||||
|
||||
#### Заключительный этап
|
||||
|
||||
В итоге получится такой набор файлов:
|
||||
|
||||
```bash
|
||||
sysadmin@doc:~/cert$ ls -l
|
||||
итого 24
|
||||
-rw-r--r-- 1 sysadmin sysadmin 1151 окт 16 14:27 astra.lan.crt
|
||||
-rw------- 1 sysadmin sysadmin 1675 окт 16 14:26 astra.lan.key
|
||||
-rw-r--r-- 1 sysadmin sysadmin 960 окт 16 14:27 astra.lan-req.csr
|
||||
-rw------- 1 sysadmin sysadmin 1679 окт 16 14:25 rootCA.key
|
||||
-rw-r--r-- 1 sysadmin sysadmin 1294 окт 16 14:25 rootCA.pem
|
||||
-rw-r--r-- 1 sysadmin sysadmin 41 окт 16 14:27 rootCA.srl
|
||||
```
|
||||
|
||||
В конфигурации web-сервера (Apache, Nginx) необходимо указать пути
|
||||
|
||||
- к сертификату - `astra.lan.crt`
|
||||
- к приватному ключу - `astra.lan.key`
|
||||
|
||||
В браузеры на клиенты добавить в доверенные корневой сертификат нашего удостоверяющего центра `rootCA.pem`
|
||||
|
||||
***
|
||||
|
||||
|
Loading…
Reference in New Issue