---
# System prepended metadata

title: Развертывание центра сертификации.
tags: [Linux]

---

###### tags: Linux 

# Развертывание центра сертификации. 

Центр сертификации (Certificate Authority, CA) – это сторона (организация), ответственная за выдачу цифровых сертификатов для проверки подлинности в Интернете. Часто для проверки подлинности веб-сайтов и других сервисов, предоставляемых широкой публике, используются публичные ЦС, а частные ЦС обычно используются для закрытых групп и частных сервисов.

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

Среди программ Linux, которые используют свои собственные частные ЦС – OpenVPN и Puppet. Вы также можете настроить свой веб-сервер для поддержки сертификатов, выданных частным ЦС, чтобы среда разработки и промежуточная среда соответствовали производственным серверам, использующим TLS для шифрования соединений.

## Подготовка перед созданием ЦС. 

Мы будем использовать инструмент управления ЦС easy-rsa для генерирования частного ключа и публичного корневого сертификата, с помощью которых вы будете подписывать запросы клиентов и серверов, использующих ваш ЦС.

Установите утилиту:
```
apt install easy-rsa
```

Подготовим директории для центра сертификации. Для этого войдите из под root пользователя:

```
sudo su -
```

Создадим директорию в домашнем каталоге пользователя root:
```
mkdir ~/easy-rsa
```
Мы используем эту директорию для создания символических ссылок, указывающих на файлы пакета easy-rsa, установленные на предыдущем шаге. Эти файлы находятся в папке /usr/share/easy-rsa на сервере ЦС.

Создайте символические ссылки с помощью команды ln:

```
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
```

:::success
Некоторые копируют файлы easy-rsa в директорию PKI, но мы используем символические ссылки, для того чтобы любые изменения пакета easy-rsa автоматически отражались в наших скриптах PKI.
:::

Чтобы ограничить доступ к созданной директории PKI, используйте команду chmod для предоставления доступа к ней только владельцу:

```
chmod 700 /root/easy-rsa/
```
Затем инициализируйте PKI в директории easy-rsa:
```
cd ~/easy-rsa
./easyrsa init-pki
```
Вывод:

![](https://i.imgur.com/qCiXCKW.png)

## Создание ЦС.

Прежде чем создавать закрытый ключ и сертификат ЦС, необходимо создать файл с именем vars и заполнить его значениями по умолчанию. Используйте команду cd для перехода в директорию easy-rsa, а затем создайте и отредактируйте файл vars с помощью nano или другого предпочитаемого текстового редактора:

```
cd ~/easy-rsa
cp vars.example vars
nano vars
```

Отыщите вот эту часть: 

![](https://i.imgur.com/xmYIUJs.png)

Раскоментите и измените под себя. К примеру так:

![](https://i.imgur.com/2Qpyopj.png)

Для создания корневой пары открытого и закрытого ключей для Центра сертификации необходимо запустить команду ./easyrsa еще раз, но уже с опцией build-ca:

```
./easyrsa build-ca
```

Вы увидите несколько строк с указанием версии OpenSSL, а затем вам будет предложено ввести фразу-пароль для пары ключей. Используйте надежную фразу-пароль и запишите ее в безопасном месте. Вам нужно будет вводить фразу-пароль каждый раз, когда вам потребуется взаимодействовать с ЦС, в частности при подписании или отзыве сертификата.

Также вам будет предложено подтвердить обычное имя (CN) вашего ЦС. CN — это имя, которое будет использоваться для данного компьютера в контексте Центра сертификации. Вы можете использовать любую строку символов как обычное имя ЦС, но для простоты нажмите ENTER, чтобы использовать имя по умолчанию.

![](https://i.imgur.com/S5MHNqj.png)

:::success
Примечание. Если вы не хотите вводить пароль при каждом взаимодействии с ЦС, вы можете запустить команду build-ca с опцией nopass:
```
./easyrsa build-ca nopass
```
:::

Теперь у нас имеется два важных файла, ~/easy-rsa/pki/ca.crt и ~/easy-rsa/pki/private/ca.key. Эти файлы соответствуют публичному и частному компонентам Центра сертификации.

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

Мы установили ЦС и готовы использовать его для подписания запросов сертификатов и отзыва сертификатов.

##  Распространение публичного сертификата Центра сертификации.

Мы настроили ЦС и можем использовать его в качестве корня доверия для любых систем, которые захотим настроить для этого. Сертификат ЦС можно добавлять на серверы OpenVPN, веб-серверы, почтовые серверы и т. д. Каждый пользователь или сервер, которому потребуется подтвердить подлинность другого пользователя или сервера в вашей сети, должен иметь копию файла ca.crt, импортированную в хранилище сертификатов операционной системы.

Чтобы импортировать публичный сертификат ЦС во вторую систему Linux, например на сервер или локальный компьютер, нужно предварительно получить копию файла ca.crt с сервера ЦС. Вы можете использовать команду cat для ее вывода в терминал, а затем скопировать и вставить ее в файл на втором компьютере, который импортирует сертификат. Также вы можете использовать sftp, scp, rsync и другие подобные инструменты для передачи файла между системами. Мы используем для копирования и вставки текстовый редактор nano, поскольку этот вариант подойдет для всех систем.

```
cat pki/ca.crt 
```

Скопируйте ключ.

![](https://i.imgur.com/fq3WKfy.png)

Используйте nano или предпочитаемый текстовый редактор на второй системе Linux, чтобы открыть файл с именем /tmp/ca.crt:

```
nano /tmp/ca.crt
```

В системах под управлением Debian и Ubuntu для импорта сертификата нужно использовать следующие команды:

```
cp /tmp/ca.crt /usr/local/share/ca-certificates/
update-ca-certificates
```

Теперь вторая система Linux будет доверять любому сертификату, подписанному нашим сервером ЦС.

:::success
Если вы используете ЦС с веб-серверами и браузер Firefox, вам нужно будет импортировать публичный сертификат ca.crt в Firefox напрямую. Firefox не использует локальное хранилище сертификатов операционной системы. 
:::

В Mac OS к примеру сертифика добавляеться через связку ключей:

![](https://i.imgur.com/7WHmKZm.png)


Нужно просто перетащить файл сертификата в связку ключей в нужный раздел. И в свойствах выбрать всегда доверять. 

В Windows тоже все очень просто: [перейдите по ссылке](https://zawindows.ru/как-добавить-сертификат-центра-серти/).

## Создание запросов на подписание сертификатов.

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

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

Следующие шаги будут выполняться на второй системе Linux с Debian, Ubuntu или одним из производных дистрибутивов.

Поскольку по умолчанию easy-rsa доступна не на всех системах, мы используем инструмент openssl для создания тренировочного закрытого ключа и сертификата.

```
apt install openssl
```

В первую очередь для создания CSR необходимо сгенерировать закрытый ключ. Чтобы создать закрытый ключ с помощью openssl, создайте директорию practice-csr и сгенерируйте ключ в этой директории.

```
mkdir ~/practice-csr
cd ~/practice-csr
openssl genrsa -out supernova.key
```

![](https://i.imgur.com/UQfopuB.png)

Теперь у нас имеется закрытый ключ, с помощью которого можно создать CSR, используя утилиту openssl. Вам будет предложено заполнить ряд полей, в том числе указать страну, область и город. Вы можете ввести ., если хотите оставить поле пустым, но для реальных CSR лучше использовать правильные значения при указании своего расположения и организации:

```
openssl req -new -key supernova.key -out supernova.req
```

Когда вас устроит тема запроса тренировочного сертификата, скопируйте файл supernova.req на сервер ЦС с помощью sftp:

![](https://i.imgur.com/5DCG7To.png)

## Подписание CSR

Поскольку мы будем работать внутри инфраструктуры PKI в ЦС, где доступна утилита easy-rsa, мы будем использовать утилиту easy-rsa для большего удобства в отличие от использования openssl, как мы делали в предыдущем примере.

Первым шагом для подписания вымышленного CSR будет импорт запроса сертификата с помощью скрипта easy-rsa:

```
cd ~/easy-rsa
./easyrsa import-req /tmp/supernova.req supernova
```

Теперь вы можете подписать запрос, запустив скрипт easyrsa с опцией sign-req, указав затем тип запроса и общее имя, включаемое в CSR. Запрос может иметь тип client, server или ca. Поскольку мы тренируемся с сертификатом для вымышленного сервера, нужно использовать тип запроса server:

```
./easyrsa sign-req server supernova
```

![](https://i.imgur.com/wV3Cp7t.png)
:::danger
commonName должен совпадать с доменным именним сайта. Поэтому если необходимо сгенерировать ssl для сайта mpt.org указываете в поле commonName = mpt.org
:::
Если вы зашифровали ключ ЦС, вам будет предложено ввести пароль.

Выполнив эти шаги, мы подписали CSR supernova.req с помощью закрытого ключа сервера ЦС в директории /home/sammy/easy-rsa/pki/private/ca.key. Полученный файл sammy-server.crt содержит открытый ключ шифрования тренировочного сервера, а также новую подпись от сервера ЦС. Подпись сообщает всем, кто доверяет ЦС, что они также могут доверять сертификату supernova.

Если бы это был запрос веб-сервера, сервера VPN или другого реального сервера, последним шагом на сервере ЦС стало бы распространение новых файлов supernova.crt и ca.crt с сервера ЦС на удаленный сервер, отправивший запрос CSR:

![](https://i.imgur.com/c8t7gXK.png)

## Проверка работы инфраструктуры ЦС. 

Для проверки я импортировал открытый сертификат ЦС себе на ноутбук. А на втором сервере создам сайт с https на nginx c использованием ранее подписанного сертификата.

Создам конфиг сайта:
```
server{
        listen 80;
        return 301 "https://$host$request_uri";

}
server {
        listen 443 ssl http2;
        server_name supernova;
        ssl_certificate /etc/nginx/ssl/supernova.crt;
        ssl_certificate_key /etc/nginx/ssl/supernova.key;
}
```

Скопируем ранее созданные ключи в директорию `nginx/ssl`
```
 cp supernova.key /etc/nginx/ssl/
 cp supernova.crt /etc/nginx/ssl/
```
Перезапустим nginx. Учтите чтобы компьютер доверял сайту доменное имя должно совпадать с именем указанным в поле `common-Name`, когда создавался сертификат. В моем случае это просто supernova. И чтобы открыть сайт я отредактировал у себя файл hosts.

Как можем заметить все работает без всяких предупреждений и есть иерархия сертификатов:

![](https://i.imgur.com/A8pfTpw.png)

Поскольку есть доверие к сертификату ЦС то будет и доверие ко всем сертификатам которые он подписал своим закрытым ключем.

## Итог

В целом мы рассмотрели почти все что вам нужно, но отдельно можете посмотреть как настроить отзыв сертификатов. 

:::danger
На демо экзамене обязательно будет задание по созданию локального центра сертификации. Поэтому рекомендую выучить наизусть команды из этого гайда, поскольку доступа в интернет у вас не будет. 
:::



Источник: [Настройка Центра сертификации](https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-debian-10-ru).



