Сегодня 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.
