# Центр Сертификации (ЦС)

## Предпосылки

Чтобы настроить свой собственный VPN сервер, в первую очередь нам необходимо иметь свой собственный сервер, который может быть, как локальным так и облачным. Я настраивал на облачном сервере, который покупал на [https://vscale.io](https://vscale.io/panel/scalets/). Так же имеет смысл уточнить, что нередко бывает так, что центр сертификации располагается на отдельном сервере, а сам VPN на другом, но в моем случае, и ЦС и VPN находятся на одном облачном сервере.

Для начала я зашел на сервер **`ssh root@you_server_ip`** и на сервере я создал второго пользователя **`adduser alex`**, после чего выдал необходимые права **`usermod -aG sudo alex`**, затем как описано в моей части по " подлкючение по SSH " и настроил подключение по SSH пользователю alex. После чего из под root  я залогинился в пользователя **`su - alex`** и ввел пароль.

#### **Теперь приступим к созданию ЦС.**

### Шаг 1 - Установка Easy-RSA <a href="#step-1-installing-easy-rsa" id="step-1-installing-easy-rsa"></a>

Первая задача в этом руководстве - установить `easy-rsa`набор сценариев на вашем CA Server. `easy-rsa`является инструментом управления центром сертификации, который вы будете использовать для создания закрытого ключа и открытого корневого сертификата, который вы затем будете использовать для подписи запросов от клиентов и серверов, которые будут полагаться на ваш ЦС.

Войдите на сервер CA как пользователь alex, не являющийся пользователем root, который вы создали на начальных этапах установки, и выполните следующие действия:

**`sudo apt update`**

**`sudo apt install openvpn easy-rsa`**

Вам будет предложено загрузить пакет и установить его. Нажмите, `y`чтобы подтвердить, что вы хотите установить пакет.

### Шаг 2 - Подготовка каталога инфраструктуры открытых ключей <a href="#step-2-preparing-a-public-key-infrastructure-directory" id="step-2-preparing-a-public-key-infrastructure-directory"></a>

Теперь, когда вы установили `easy-rsa`, пришло время создать [инфраструктуру](https://en.wikipedia.org/wiki/Public_key_infrastructure) открытого [ключа](https://en.wikipedia.org/wiki/Public_key_infrastructure) (PKI) на CA Server. Убедитесь, что вы по-прежнему вошли в систему как пользователь без полномочий root, и создайте `easy-rsa`каталог. Убедитесь, что вы **не используете sudo** для запуска любой из следующих команд, поскольку ваш обычный пользователь должен управлять и взаимодействовать с ЦС без повышенных привилегий.

**`mkdir ~/easy-rsa`**

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

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

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

**Примечание.** В то время как другие руководства могут указывать, что вы должны скопировать `easy-rsa`файлы пакета в каталог PKI, в этом руководстве используется метод символьных ссылок. В результате любые обновления `easy-rsa`пакета будут автоматически отражаться в скриптах вашей PKI.<br>

Чтобы ограничить доступ к новому каталогу PKI, убедитесь, что только владелец может получить к нему доступ с помощью `chmod`команды:

**`chmod 700 /home/sammy/easy-rsa`**

Наконец, инициализируйте PKI внутри `easy-rsa`каталога:

**`cd ~/easy-rsa`**

**`./easyrsa init-pki`**

Вывод должен быть таким:

```
Outputinit-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/sammy/easy-rsa/pki
```

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

### Шаг 3 - Создание центра сертификации <a href="#step-3-creating-a-certificate-authority" id="step-3-creating-a-certificate-authority"></a>

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

**`cd ~/easy-rsa`**

**`nano vars`**

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

```
~/easy-rsa/varsset_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "DigitalOcean"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"
```

Когда вы закончите, сохраните и закройте файл. Если вы используете `nano`, вы можете сделать это, нажав `CTRL+X`, затем `Y`и `ENTER`для подтверждения. Теперь вы готовы построить свой CA.

Чтобы создать корневую пару открытого и закрытого ключей для вашего центра сертификации, `./easy-rsa`снова введите команду, на этот раз с `build-ca`параметром:

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

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

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

```
Output. . .
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/sammy/easy-rsa/pki/ca.crt
```

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

**`./easyrsa build-ca nopass`**

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

* `ca.crt`файл открытого сертификата CA. Пользователи, серверы и клиенты будут использовать этот сертификат для проверки того, что они являются частью одной сети доверия. Каждый пользователь и сервер, который использует ваш CA, должен иметь копию этого файла. Все стороны будут полагаться на публичный сертификат, чтобы гарантировать, что кто-то не выдает себя за систему и не совершает [атаку «человек посередине»](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) .
* `ca.key`это закрытый ключ, который CA использует для подписи сертификатов для серверов и клиентов. Если злоумышленник получит доступ к вашему СА и, в свою очередь, к вашему `ca.key`файлу, вам нужно будет уничтожить ваш СА. Вот почему ваш `ca.key`файл должен находиться **только** на вашем компьютере CA, и в идеале ваш компьютер CA должен оставаться в автономном режиме, если вы не подписываете запросы на сертификат в качестве дополнительной меры безопасности.

После этого ваш центр сертификации будет готов и будет использоваться для подписи запросов на сертификаты и для отзыва сертификатов.

### Шаг 4 - Распространение публичного сертификата вашего центра сертификации <a href="#step-4-distributing-your-certificate-authoritys-public-certificate" id="step-4-distributing-your-certificate-authoritys-public-certificate"></a>

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

Чтобы импортировать общедоступный сертификат CA во вторую систему Linux, такую ​​как другой сервер или локальный компьютер, сначала получите копию `ca.crt`файла с вашего сервера CA. Вы можете использовать `cat`команду для вывода его в терминал, а затем скопировать и вставить его в файл на втором компьютере, который импортирует сертификат. Вы также можете использовать такие инструменты, как `scp`, `rsync`для передачи файла между системами. Однако `nano`на этом шаге мы будем использовать копирование и вставку, поскольку оно будет работать во всех системах.

Как пользователь без полномочий root на CA Server, выполните следующую команду:

**`cat ~/easy-rsa/pki/ca.crt`**

В вашем терминале будет вывод, похожий на следующий:

```
Output-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw
. . .
. . .
-----END CERTIFICATE-----
```

Скопируйте все, включая `-----BEGIN CERTIFICATE-----`и `-----END CERTIFICATE-----`строки и тире.

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

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

Вставьте содержимое, которое вы только что скопировали с CA Server в редактор. Когда вы закончите, сохраните и закройте файл. Если вы используете `nano`, вы можете сделать это, нажав `CTRL+X`, затем `Y`и `ENTER`для подтверждения.

Теперь, когда у вас есть копия `ca.crt`файла во второй системе Linux, пришло время импортировать сертификат в хранилище сертификатов операционной системы.

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

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

**`sudo update-ca-certificates`**

Чтобы импортировать сертификат CA Server в системе на основе CentOS, Fedora или RedHat, скопируйте и вставьте содержимое файла в систему, как в предыдущем примере, в файл с именем `/tmp/ca.crt`. Далее вы скопируете сертификат в `/etc/pki/ca-trust/source/anchors/`, а затем выполните `update-ca-trust`команду.CentOS, Fedora, RedHat дистрибутивы

**`sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/`**

**`sudo update-ca-trust`**

Теперь ваша вторая система Linux будет доверять любому сертификату, подписанному сервером CA. В нашем случае это будет один и тот же сервер!!

**Примечание.** Если вы используете свой CA с веб-серверами и используете Firefox в качестве браузера, вам необходимо импортировать публичный `ca.crt`сертификат непосредственно в Firefox. Firefox не использует хранилище сертификатов локальной операционной системы. Для получения подробной информации о том, как добавить сертификат вашего CA в Firefox, смотрите эту статью поддержки от Mozilla по [настройке центров сертификации (CA) в Firefox](https://support.mozilla.org/en-US/kb/setting-certificate-authorities-firefox) .

Если вы используете свой ЦС для интеграции со средой Windows или настольными компьютерами, ознакомьтесь с документацией по `certutil.exe` [установке сертификата ЦС](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certutil#-installcert) .<br>

Про отзыв сертификатов можно почитать тут: <https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04#step-1-%E2%80%94-installing-easy-rsa>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aleksey-vi.gitbook.io/linux/baza-znanii-sis.-admina/nastroika-svoego-sobstvennogo-vpn/centr-sertifikacii-cs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
