Как создать Certificate Authority (CA) в Ubuntu 20.04

Как создать Certificate Authority (CA) в Ubuntu 20.04

 

Certificate Authority (CA) — это организация, ответственная за выпуск цифровых сертификатов для обеспечения безопасности связи. Он действует как доверенная третья сторона по отношению к владельцу сертификата и стороне, полагающейся на сертификат.

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

В этом руководстве мы узнаем, как создать частный Certificate Authority  (CA) в Ubuntu 20.04 . Здесь мы используем утилиту CLI easy-rsa для создания и управления CA Server.

Предварительные условия

  • Узел с Ubuntu 20.04 для размещения CA Server
  • Пользователь с привилегиями sudo

Шаг 1. Обновите вашу систему

Сначала обновите свою систему Ubuntu, выполните следующую команду:

apt update

Вы можете пропустить этот шаг, если устанавливаете easy-rsa из официального репозитория.

Шаг 2. Установите Easy-RSA на сервер CA

Easy-RSA — это инструмент командной строки, который значительно упрощает создание центра сертификации (ЦС) и управление сертификатами. Он генерирует закрытый ключ и открытый корневой сертификат.

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 :

sudo mv EasyRSA-3.0.8 easy-rsa

Теперь сделайте пользователя без полномочий root владельцем каталога:

sudo chown -R franck:franck easy-rsa/ 

Ограничить доступ к каталогу PKI только для владельца:

sudo chmod 700 easy-rsa

Шаг 3: Настройте CA-сервер

Здесь мы настроим каталог инфраструктуры открытого ключа и создадим общедоступный / частный сертификат для сервера 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        "LINUXSHARE"
set_var EASYRSA_REQ_EMAIL      "admin@linuxshare.com"
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

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

$ ./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 franck@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.
 franck@X.Y.Z.T's password: 
 ca.crt     100% 749 2.4KB/s 00:00

Переместите файл сертификата в /usr/local/share/ca-certificates/каталог:

sudo mv ca.crt /usr/local/share/ca-certificates/

Теперь импортируйте сертификат CA Server, используя следующую команду:

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) на другом сервере, чтобы наш центр сертификации подписал эти запросы.

Мы будем использовать OpenSSL для создания файла CSR. Если 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]:LinuxShare
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 franck@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/published/. Вы также можете проверить сертификат, указав его:

$ ls -l /opt/easy-rsa/pki/issued

Output:

total 4
 -rw------- 1 franck franck 3996 Oct  2 16:57 server1.crt

Выполнив все эти действия, вы сможете самостоятельно управлять своими сертификатами для своих внутренних серверов. С помощью своего CA-сервера вы можете подписывать сертификаты для своих веб-серверов или VPN-туннеля, например, с помощью OpenVPN.

Примечание. По соображениям безопасности не рекомендуется запускать какие-либо другие службы на сервере CA Server. Его следует использовать только для импорта, подписи и отзыва запросов сертификатов в качестве автономного сервера.

Заключение

В этом руководстве мы узнали, как создать частный Certificate Authority (CA) в Ubuntu 20.04. Спасибо за чтение, пожалуйста, поделитесь своими отзывами и предложениями в разделе комментариев.