Certificate Authority (CA) – это организация, ответственная за выпуск цифровых сертификатов для обеспечения безопасности связи.
Она выступает в качестве доверенной третьей стороны для владельца сертификата и стороны, полагающейся на сертификат.
Удостоверяющий центр может быть как государственным, так и частным.
Публичные УЦ обычно используются для проверки подлинности веб-сайтов, а частные центры сертификации используются для генерации сертификатов для VPN между клиентами, пользователями, внутренними серверами или отдельными программами и службами в вашей инфраструктуре, например, локальными веб-серверами.
В этом руководстве мы узнаем, как создать частный УЦ на Ubuntu 20.04.
В данном примере мы используем утилиту easy-rsa CLI для создания и управления сервером УЦ.
Ранее мы уже рассматривали этот инструмент:
- 🖧 Как установить и подключить клиент OpenVPN на Debian
- 🐧 Установка и настройка сервера OpenVPN на RHEL 8 / CentOS 8
- 🖧 Как установить и подключить OpenVPN-клиент на Ubuntu
- Установка и настройка сервера OpenVPN в Fedora 29 / CentOS 7
Шаг 1: Обновите свою систему
Сначала обновите систему Ubuntu, выполните следующую команду:
apt update
Вы можете пропустить этот шаг, если устанавливаете easy-rsa из официального репозитория.
Шаг 2: Установите Easy-RSA на сервер УЦ
Easy-RSA – это инструмент командной строки, который значительно облегчает создание CA и управление сертификатами.
Он генерирует закрытый ключ и открытый корневой сертификат.
Easy-RSA доступен в репозитории apt по умолчанию.
Чтобы получить последнюю версию, установите ее из официального репозитория easy-rsa на GitHub.
Скачайте инструмент управления Easy-RSA PKI с Github:
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
Здесь мы загрузили версию 3.0.8.
Теперь давайте переместим файл в папку /opt
sudo mv EasyRSA-3.0.8.tgz /opt
Теперь измените каталог на /opt:
cd /opt
Выполните следующую команду для распаковки файла .tgz:
sudo tar xvf EasyRSA-3.0.8.tgz
Переименуйте каталог с помощью команды mv:
🐧 Команда mv на Linux с полезными примерами
sudo mv EasyRSA-3.0.8 easy-rsa
Теперь сделайте пользователя, не являющегося пользователем root, владельцем каталога:
sudo chown -R itsec:itsec easy-rsa/
Ограничение доступа к каталогу PKI, только для владельца:
sudo chmod 700 easy-rsa
Шаг 3: Настройка сервера УЦ
Здесь мы настроим каталог инфраструктуры публичных ключей и создадим публичный/частный сертификат для сервера CA.
Теперь измените каталог на easy-rsa, который был создан ранее:
cd easy-rsa
Мы создадим файл vars, который будет использоваться для хранения информации об организации
$ cp vars.example vars
Теперь добавьте информацию об организации в конец файла
$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Centre"
set_var EASYRSA_REQ_CITY "Yaounde"
set_var EASYRSA_REQ_ORG "ITSECFORU"
set_var EASYRSA_REQ_EMAIL "admin@itsecforu.ru"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Теперь мы инициализируем каталог инфраструктуры открытых ключей:
$ ./easyrsa init-pki
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/easy-rsa/pki
Чтобы сгенерировать корневую пару открытого и закрытого ключей для сервера УЦ, введите:
$ ./easyrsa build-ca
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
read EC key
writing EC 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.
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:
/opt/easy-rsa/pki/ca.crt
Вам будет предложено ввести ключевую фразу для пары ключей, которая понадобится вам в любое время для подписания или отзыва сертификата.
Вам также будет предложено ввести общее имя (CN) для вашего УЦ, вы можете использовать имя по умолчанию, если хотите.
В результате операции будут созданы два основных файла:
- Файл публичного сертификата ca.crt, который серверы и клиенты будут использовать для проверки того, что они находятся в одном периметре доверия
- Файл закрытого ключа ca.key в каталоге pki/private, который ЦС использует для подписи сертификатов серверов и клиентов.
Шаг 4: Импорт публичного сертификата УЦ
Теперь мы получили сгенерированный публичный сертификат, и нам нужно импортировать его на другой сервер.
Войдите на сервер, на который вы хотите импортировать сертификат, затем выполните удаленное копирование файла ca.crt с сервера CA.
scp itsecforu@X.Y.Z.T:/opt/easy-rsa/pki/ca.crt
The authenticity of host 'X.Y.Z.T (X.Y.Z.T)' can't be established.
ECDSA key fingerprint is SHA256:ffUgP5/d0Z3miOKqxBVoF9JbFvIZFs/gxr7ESBZ0kmQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '139.177.204.145' (ECDSA) to the list of known hosts.
itsecforu@X.Y.Z.T's password:
ca.crt
Переместите файл сертификата в каталог /usr/local/share/ca-certificates/:
sudo mv ca.crt /usr/local/share/ca-certificates/
Теперь импортируйте сертификат сервера CA с помощью следующей команды:
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs…
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d…
done.
После этого ваш сервер будет доверять сертификатам, подписанным вашим сервером CA.
Шаг 5: Создайте запрос на сертификат сервера и закрытый ключ
Мы можем создать несколько запросов на подписание сертификата (CSR) на другом сервере, чтобы наш центр сертификации подписал эти запросы.
- 👩💼 Как создать CSR (запрос на подпись сертификата) в Linux
- Создание пользователя, сертификата и подписи CSR для менеджера сертификатов Lemur
- 🔐 Как создать самоподписанный сертификат SSL
Для создания файла CSR мы будем использовать OpenSSL.
Если OpenSSL не установлен, используйте следующую команду для его установки:
sudo apt install openssl
Создайте каталог с именем server1-csr для хранения CSR и закрытого ключа
mkdir server1-csr
Перейдите в каталог server1-csr
cd server1-csr
Теперь сгенерируйте закрытый ключ с помощью OpenSSL:
openssl genrsa -out server1.key
Generating RSA private key, 2048 bit long modulus (2 primes)
..........+++++
..................................................+++++
e is 65537 (0x010001)
Вы можете сгенерировать соответствующий CSR, используя сгенерированный ключ:
$ openssl req -new -key server1.key -out server1.req
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]:CM
State or Province Name (full name) [Some-State]:CE
Locality Name (eg, city) []:Yaounde
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Itsecforu
Organizational Unit Name (eg, section) []:Tech-B
Common Name (e.g. server FQDN or YOUR name) []:server1
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Теперь необходимо скопировать файл CSR на сервер CA:
$ scp server1.req scp itsecforu@X.Y.Z.T:/tmp/server1.req
Шаг 6: Подпишите CSR сервера на сервере CA
Созданный CSR должен быть подписан сервером CA.
Для этого сначала перейдите в каталог easy-rsa, чтобы импортировать запрос на подпись сертификата сервера.
./easyrsa import-req /opt/sign-cert/server1.req server1
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
The request has been successfully imported with a short name of: server1
You may now use this name to perform signing operations on this request.
Теперь подпишите CSR с помощью следующей команды:
./easyrsa sign-req server server1
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
countryName = CM
stateOrProvinceName = CE
localityName = Yaounde
organizationName = LinuxShare
organizationalUnitName = Tech-B
commonName = server1
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-161486.BI2HwH/tmp.lIqZoF
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CM'
stateOrProvinceName :ASN.1 12:'CE'
localityName :ASN.1 12:'Yaounde'
organizationName :ASN.1 12:'LinuxShare'
organizationalUnitName:ASN.1 12:'Tech-B'
commonName :ASN.1 12:'server1'
Certificate is to be certified until Jan 5 16:57:26 2024 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /opt/easy-rsa/pki/issued/server1.crt
Из вывода видно, что сертификат выдан в каталоге /opt/easy-rsa/pki/issued/.
Вы также можете проверить сертификат, перечислив его:
$ ls -l /opt/easy-rsa/pki/issued
Вывод:
total 4
-rw------- 1 franck franck 3996 Oct 2 16:57 server1.crt
Выполнив все эти действия, вы сможете самостоятельно управлять сертификатами для своих внутренних серверов.
С помощью своего CA-сервера вы можете подписывать сертификаты для своих веб-серверов или для VPN-туннеля, например, с помощью OpenVPN.
Примечание: В целях безопасности рекомендуется не запускать другие службы на сервере CA. Он должен использоваться только для импорта, подписания и отзыва запросов на сертификаты в качестве отдельного сервера.
Заключение
В этом руководстве мы узнали, как создать частный центр сертификации (ЦС) на Ubuntu 20.04.
Оставляйте свои отзывы и предложения в разделе комментариев.