Сегодня TLS используется повсеместно для безопасной передачи данных, и практически любой веб‑сайт работает по протоколу HTTPS. Но, кроме шифрования трафика, TLS позволяет реализовать аутентификацию клиентов по сертификату (mTLS). В этой статье мы настроим этот механизм на примере веб‑сервера Angie.
Навигация по циклу
Настройка location в Angie. Разделение динамических и статических запросов.
Перенаправления в Angie: return, rewrite и примеры их применения.
Сжатие текста в Angie: статика, динамика, производительность.
Аутентификация клиентов в Angie с помощью TLS-сертификатов.
Видеоверсия
Для вашего удобства подготовлена видеоверсия этой статьи, доступна на Rutube, VKVideo и YouTube.
Принцип работы mTLS
При использовании стандартного протокола HTTPS сервер при подключении представляется с помощью сертификата. В процедуре рукопожатия происходит согласование параметров подключения (шифры, ключ симметричного шифрования, версии протоколов) и аутентификация сервера (по имени).
Сертификат представляет собой открытый ключ (public key) с подписью от удостоверяющего центра (также ЦС — центр сертификации, или CA — certificate authority). К каждому сертификату прилагается секретный ключ (private key).
При этом клиент сверяет имя сервера, к которому обращается, и имя в сертификате; проверяет дату действия сертификата; решает, доверять ли удостоверяющему центру, который выдал этот сертификат. Если какая‑либо из этих проверок не даёт положительный результат, то соединение считается небезопасным и процесс подключения прерывается (если, конечно, явно не разрешить игнорирование этих проблем).
В случае взаимного TLS (mTLS — mutual TLS authentication) клиент также должен представиться с помощью сертификата для того, чтобы получить доступ к ресурсам на сервере. В простом случае для получения доступа достаточно, чтобы клиентский сертификат был подписан удостоверяющим центром, которому доверяет сервер. Если при обычном подключении HTTPS‑клиент уже имеет список доверенных (корневых) удостоверяющих центров, то в mTLS сертификат доверенного центра указывается в конфигурации явно.
Таким образом, при использовании mTLS мы получаем возможность аутентифицировать клиента, но нам потребуется доверенный удостоверяющий центр и сертификаты клиентов.
Подготовка сертификатов
Для создания клиентских сертификатов мы будем использовать проект EasyRSA, который позволяет легко создать собственный удостоверяющий центр и выписывать сертификаты. Начнём с установки пакета (в статье команды приведены на примере Ubuntu 24.04):
apt install easy-rsaДалее нам необходимо создать конфигурацию собственного удостоверяющего центра (будем использовать директорию /etc/angie/easy-rsa):
make-cadir /etc/angie/easy-rsaДалее переходим в эту директорию и запускаем процесс инициализации CA:
cd /etc/angie/easy-rsa
./easyrsa init-pki
./easyrsa build-caВ процессе настройки устанавливаем надёжный пароль (passphrase) для шифрования секретного ключа. Дополнительно можно внести изменения в конфигурационный файл (vars) для настройки свойств сертификатов. Значения, конечно же, приведены для примера и могут меняться:
echo 'set_var EASYRSA_DN "ROOTCA"' >> vars
echo 'set_var EASYRSA_KEY_SIZE 4096' >> vars
echo 'set_var EASYRSA_REQ_COUNTRY "RU"' >> vars
echo 'set_var EASYRSA_REQ_PROVINCE "Moscow"' >> vars
echo 'set_var EASYRSA_REQ_CITY "Moscow"' >> vars
echo 'set_var EASYRSA_REQ_ORG "IT Corp"' >> vars
echo 'set_var EASYRSA_REQ_OU "IT"' >> vars
echo 'set_var EASYRSA_REQ_EMAIL "test@test.ru"' >> varsТеперь мы можем выписать комплект из сертификата и секретного ключа сервера:
./easyrsa build-server-full server nopassПолученную пару файлов копируем в директорию настроек TLS Angie (/etc/angie/ssl/). Обратите внимание, что название сертификата в предыдущей команде (server) фигурирует в пути к сертификату и ключу:
mkdir /etc/angie/ssl
cp /etc/angie/easy-rsa/pki/issued/server.crt /etc/angie/ssl
cp /etc/angie/easy-rsa/pki/private/server.key /etc/angie/sslНа этом с серверной частью мы закончили. Осталось сгенерировать сертификат и ключ для клиента:
./easyrsa build-client-full client nopassТакже генерируем список отзыва сертификатов (CRL — Certificate Revocation List):
./easyrsa gen-crlТеперь, когда все необходимые сертификаты созданы, можно переходить к настройке сервера Angie.
Настройка mTLS в Angie
Настроим для проверки работы mTLS тестовый сервер. Настройка сходна с обычным HTTPS, но будет иметь несколько дополнительных директив:
server {
listen 443 ssl;
server_name server;
ssl_certificate /etc/angie/ssl/server.crt;
ssl_certificate_key /etc/angie/ssl/server.key;
ssl_client_certificate /etc/angie/easy-rsa/pki/ca.crt;
ssl_crl /etc/angie/easy-rsa/pki/crl.pem;
ssl_verify_client on;
root /usr/share/angie/html;
}Как можно видеть, мы используем привычные директивы ssl_certificate и ssl_certificate_key, чтобы указать сертификат и ключ сервера. Рассмотрим новые директивы для mTLS:
ssl_client_certificate— сертификат нашего удостоверяющего центра (для проверки клиентских сертификатов);ssl_crl— список отозванных сертификатов (для отзыва доступа).ssl_verify_client— включение проверки клиентских сертификатов.
В этой конфигурации мы включили строгую проверку клиентских сертификатов (ssl_verify_client on). Также возможна конфигурация, где проверка сертификатов будет необязательной (optional) или вообще не будет проводиться, но запрос на сертификат будет отправлен (optional_no_ca).
Проверяем и обновляем конфигурацию Angie:
angie -t
systemctl reload angieЕсли конфигурация обновилась и ошибок в /var/log/angie/error.log нет, можно приступать к тестированию настроек.
Проверка подключения
Начнём с простого метода тестирования подключения утилитой curl. Нам понадобится указать в параметрах путь к файлу клиентского сертификата и ключа к нему:
curl --head -Lks --cert /etc/angie/easy-rsa/pki/issued/client.crt \
--key /etc/angie/easy-rsa/pki/private/client.key https://localhostТакже мы отключаем проверку валидности сертификата сервера (так как он не является доверенным с точки зрения системы). В случае успешного запроса мы получим ответ сервера с кодом 200:
HTTP/1.1 200 OK
Server: Angie/1.10.2
Date: Wed, 12 Nov 2025 12:44:41 GMT
...Для использования клиентского сертификата в браузере необходимо проделать несколько дополнительных шагов (в примере используется браузер Chrome).
Сначала нужно подготовить файл для импорта в браузер. Клиентский сертификат и ключ будут экспортированы в файл формата PKCS12. Для этого можно использовать утилиту openssl:
openssl pkcs12 -export \
-in /etc/angie/easy-rsa/pki/issued/client.crt \
-inkey /etc/angie/easy-rsa/pki/private/client.key -out client.p12При экспорте будет запрошен пароль — он потребуется для импорта сертификата в браузер. Полученный файл (client.p12) необходимо скопировать на клиентскую машину для импорта в браузер.
Открываем страницу настроек сертификатов в Chrome (chrome://settings/certificates). В разделе управления сертификатами (Manage certificates) находим раздел собственных сертификатов (Your certificates) и нажимаем кнопку импорта (Import). Указываем путь к файлу client.p12 и вводим пароль, который мы указывали при экспорте командой openssl.
При попытке подключиться мы увидим предложение использовать клиентский сертификат (можно выбрать из списка) и получим ответ от сервера.
Управление сертификатами в EasyRSA
По умолчанию сертификаты EasyRSA имеют срок действия немногим более двух лет (825 дней). При необходимости продления сертификата можно использовать команду renew с указанием названия сертификата. Например, для нашего серверного сертификата:
./easyrsa renew serverДля обновления клиентского сертификата:
./easyrsa renew clientЕсли файлы копировались в другие директории, не забудьте повторить эти действия с новыми файлами сертификатов и ключей.
Если необходимо отозвать клиентский сертификат, запустите команды отзыва и формирования списка CRL:
./easyrsa revoke client
./easyrsa gen-crlЧтобы список применился, обновите конфигурацию Angie:
systemctl reload angieТеперь нам знакомы базовые манипуляции с сертификатами, выпущенными с помощью EasyRSA.
Итоги
Мы успешно разобрали основы работы механизма mTLS для взаимной аутентификации клиента и сервера; создали собственный CA с помощью системы EasyRSA и получили сертификаты для сервера и клиента; наконец, настроили сервер с требованием аутентификации по сертификатам. Также мы немного раскрыли вопрос управления сертификатами в EasyRSA.
