TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #5293 10.7K
Для тех, кто работал с OpenVPN, привычен метод аутентификации на основе клиентских сертификатов, который используется там по умолчанию. В веб сервере Angie ровно эти же сертификаты можно использовать для аутентификации клиентов при доступе к закрытым сервисам.

Мне никогда на глаза не попадалась подобная реализация. Я примерно представлял, что так можно, но когда увидел в недавнем видео, как это легко и быстро настраивается, решил проверить и сделать краткую инструкцию, чтобы можно было повторить в случае необходимости. Мне видится это удобным методом, когда есть возможность установить клиентский сертификат в браузер. Это и безопасно, и удобно для пользователя, если он сумеет один раз настроить доступ.

Для реализации подобного метода понадобится свой CA для выпуска сертификатов, сертификат сервера, сертификаты клиентов. Подойдёт любая инструкция для OpenVPN, где делается всё то же самое. В качестве программы для работы с сертификатами можно использовать:

◽️Easy-RSA - популярный набор скриптов на базе openssl.
◽️Step-CA - своя локальная служба для управления CA с простой автоматизацией перевыпуска.
◽️CFSSL - современная одиночная утилита от CloudFlare с конфигами в формате json.
◽️XCA - кроссплатформенное приложение с GUI, в отличие от предыдущих вариантов консольных команд.

Для простоты и краткости команд я возьму Easy-RSA. Но если вы хотите в графическом интерфейсе всё делать, то берите XCA. Принцип там такой же.

Ставим Easy-RSA:

# apt install easy-rsa

Создаём свой CA:

# make-cadir /etc/angie/easy-rsa
# cd /etc/angie/easy-rsa
# ./easyrsa init-pki
# ./easyrsa build-ca

По умолчанию сертификат для CA выпускается на 10 лет, остальные - на 825 дней. Сделаем остальные тоже 10-ти летними. Добавляем в файл vars параметр:

set_var EASYRSA_CERT_EXPIRE 3650

Заодно увеличим время жизни списка отозванных сертификатов до года. Я не знаю, как ведёт себя Angie, но OpenVPN перестаёт принимать новые аутентификации, когда файл отзывов протухает.

set_var EASYRSA_CRL_DAYS 365

Остальные параметры меняйте по своему усмотрению. Они некритичны. Выпускаем сертификаты и ключи для сервера и первого клиента:

# ./easyrsa build-server-full server nopass
# cp /etc/angie/easy-rsa/pki/issued/server.crt /etc/angie
# cp /etc/angie/easy-rsa/pki/private/server.key /etc/angie
# ./easyrsa build-client-full client01 nopass

Для передачи клиенту сертификат и ключ от него надо упаковать в один контейнер формата PKCS12:

# openssl pkcs12 -export -in /etc/angie/easy-rsa/pki/issued/client01.crt -inkey /etc/angie/easy-rsa/pki/private/client01.key -out client01.p12

Передаём client01.p12 клиенту. Готовим конфигурацию виртуального сервера Angie. Показываю на примере конфигурации default.conf с доступом по IP:

server {
  listen    443 ssl;
  server_name localhost;

  access_log /var/log/angie/host.access.log main;

  ssl_certificate   /etc/angie/server.crt;
  ssl_certificate_key /etc/angie/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;

  location / {
    root  /usr/share/angie/html;
    index index.html index.htm;
  }
}

Перезапускаю веб сервер:

# angie -t
# angie -s reload

Захожу на веб сервер по IP - получаю ошибку: "400 Bad Request
No required SSL certificate was sent".

Надо добавить сертификат в браузер. В Яндекс.Браузере это делается в разделе Настройки ⇨ Системные ⇨ Сеть ⇨ Управление сертификатами ⇨ Импорт ⇨ Выбираем скопированный файл client01.p12.

Теперь мы попадаем на стандартную страницу веб сервера. Если нужно запретить доступ пользователю - отзываем его сертификат:

# ./easyrsa --batch revoke client01
# ./easyrsa gen-crl
# angie -s reload

Эти команды обновят файл отзывов crl.pem, который проверяет веб сервер. Последний надо обязательно заставить перечитать конфигурацию, иначе он не примет изменения. Теперь client01 получит ошибку доступа: "The SSL certificate error".

Простая и удобная аутентификация. Берите на вооружение.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#angie
  • 👍 147
  • 👎 4
More from @srv_admin
  1. Sep 29, 2026Что крупные заказчики проверяют на пилоте NGFW Чем крупнее сеть, тем выше требования к NGF…
  2. Sep 28, 2026Компания Microsoft давно анонсировала возврат настройки по управлению размещением панели з…
  3. Sep 28, 2026Сложный, но критически важный процесс: усиление защищенности инфраструктуры. Для него нужн…
  4. Sep 28, 2026Узнал совсем недавно про очень любопытный проект для запуска PHP приложений. Я краем глаза…
  5. Sep 25, 2026▶️ Очередная подборка авторских IT роликов, которые я лично посмотрел и посчитал интересны…
  6. Sep 25, 2026Подписчик поделился полезным проектом - Webtop. Это Linux дистрибутив с графикой, упакован…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →