Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Предпосылки и предварительные действия
- Формирование структуры каталогов и файлов
- Создание самоподписанного сертификата
- Настройки Nginx
- Создание пользовательского сертификата
- Создание сертификата P12
- Настройка обозревателя
- Удаление и отзыв сертификатов
Часто возникает потребность в установлении ограниченного доступа пользователям к тем или иным страницам веб-ресурса, что обусловлено вопросами безопасности при работе с конфиденциальной информацией. Это можно решить путем настройки авторизации посредством SSL/TLS сертификатов на уровне веб-сервера. Такой подход очень удобен для взаимодействия с API . Продемонстрируем трудоспособность указанного подхода на практике.
Предпосылки и предварительные действия
Для реализации этого подхода будет задействован веб-сервер Nginx, ОС Ubuntu 22.04 и возможности центра сертификации Let’s Encrypt,предоставляющего для шифрования данных бесплатные криптографические сертификаты типа X.509. Пакет с плагинами настройки и получения сертификатов Let's Encrypt включен в официальный репозиторий дистрибутива Debian, предоставляющий широкие возможности для его применения в Linux-подобных системах.
Следует отметить, что указанный сервис в своей работе применяет несколько методов шифрования данных, отличающихся сложностью и степенью надежности. Как известно, надежность шифрования N повышается пропорционально экспоненту:
N = 2x ,
где х – количество битов, котрыми кодируются ключи.
Наименее надежен RSA-метод. Наиболее надежны методы шифрования, основанные на эллиптических кривых, в частности, это secp384r1. В этом случае ключ будет иметь длину в 384 бита, что соотносится с длиной в 7680 бит при использовании метода RSA. То есть, принципиально с помощью RSA можно получить такую ??же защиту, как и при использовании метода эллиптических кривых, однако, за счет значительного увеличения количества кодирующих битов. В результате, при практическом использовании такого канала неизбежны задержки передачи данных на уровне девайсов и другие «побочные эффекты». Именно поэтому для настройки авторизации посредством SSL/TLS сертификатов мы рекомендуем применять методы secp384r1 или secp512r1. В нашем случае будет использован метод secp384r1.
Проверим наличие и версии программных компонентов, установленных в нашей системе. В первую очередь, проверим сервис OpenSSL. Для этого наберем в терминале:
$ openssl version -a
Итак, установлена версия OpenSSL 3.0.2, которая нас вполне устраивает.
Проверим статус службы веб-сервера Nginx:Nginx:
$ systemctl status nginx
Как видим, сервер запущен, значит, можно работать.
Рассмотрим существующие каталоги и файлы в системе веб-сервера, это нам пригодится в дальнейшем при внесении изменений в конфигурационные файлы:
$ ls /etc/nginx/
Формирование структуры каталогов и файлов
Создадим структуру каталогов, в которой будут храниться конфигурационные файлы, ключи и сертификаты:
$ mkdir /etc/nginx/site.ua $ cd /etc/nginx/site.ua
Где site.ua – директория для нашего веб-ресурса. Создадим в ней набор каталогов для хранения сертификатов разного назначения:
$ mkdir usr_certs $ mkdir certs $ mkdir new_certs
Создадим набор конфигурационных файлов:
$ touch index.txt $ touch main.conf $ touch ser_nom
Внесем в файл ser_nom исходный номер сертификата, с которого начнется автоматический отсчет для других сертификатов:
$ echo "01" > ser_nom
Ограничим доступ к каталогу site.ua таким образом, чтобы только его владелец мог читать, записывать и запускать на исполнение содержащиеся в нем файлы:
$ chmod 700 ./
Создание самоподписанного сертификата
Создадим свой доверенный сертификат на базе алгоритма шифрования типа эллиптические кривые. Для этого сначала отправим запрос на генерирование ключа для него с названием main:
$ openssl ecparam -out /etc/nginx/site.ua/certs/main.key -name secp384r1 -genkey
Где secp384r1 – название метода шифрования ключа (эллиптические кривые).
Теперь сформируем запрос на создание нового сертификата под названием main.crt:
$ openssl req -new -x509 -days 500 -sha512 -key /etc/nginx/site.ua/certs/main.key -subj /O=Ukraine/emailAddress=alexandr7500g@gmail.com -out /etc/nginx/site.ua/certs/main.crt
Здесь опция x509 – указывает на создание самоподписанного сертификата; опция days устанавливает срок его действия (500 дней); параметр O – фиксирует название нашей компании (Ukraine); emailAddress – почта компании; out – указание на место, где будет создан файл сертификата.
Убедимся, что ключ и сертификат были созданы. Для этого наберем в терминале:
$ ls certs
Да, файлы с названиями main.key и main.crt находятся в своем месте.
Настройки Nginx
Добавим к файлу настроек сервера Nginx для нашего сайта, значение некоторых важных параметров относительно верификации агентов. Для этого вызовем редактор nano:
$ nano ../sites-enabled/site.ua
Вставим в файл следующие параметры с соответствующими значениями:
ssl_client_certificate – путь к местонахождению главного сертификата;
ssl_verify_client – разрешение на верификацию клиента;
keepalive_timeout – максимальное допустимое время (с) для установки соединение.
Для автоматического создания сертификатов добавим необходимые параметры с соответствующими значениями к созданному нами ранее главному конфигурационному файлу main.conf. Для этого наберем в терминале:
$ nano main.conf
Добавляем в файл следующие строки:
[ ca ] default_ca = CA_CLIENT [ CA_CLIENT ] dir = /etc/nginx/site.ua/ certs = /etc/nginx/site.ua/certs new_certs_dir = /etc/nginx/site.ua/new_certs database = $dir/index.txt serial = $dir/ser_nom certificate = $dir/certs/main.crt private_key = $dir/certs/main.key default_days = 365 default_crl_days = 5 default_md = md5 policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = supplied commonName = supplied emailAddress = supplied
Сохраним внесенные изменения и выйдем из редактора (ctrl+X).
Создание пользовательского сертификата
Чтобы пользователь мог иметь доступ к определенным страницам нашего сайта, для него должен быть зарегистрирован в системе закрытый ключ, а также созданы CSR и CRT сертификаты.
Сначала создадим закрытый ключ с помощью соответствующей команды:
$ openssl ecparam -out /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.key -name secp384r1 -genkey
Теперь сформируем запрос на создание CSR сертификата. Для этого введем в терминале:
$ openssl req -new -key /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.key -subj /C=UA/ST=Kievregion/L=Kiev/OU=Alexander/CN=FreeHost/emailAddress=alexandr7500@meta.ua -out /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.csr
Убедимся, что ключ и сертификат были созданы:
$ ls /etc/nginx/site.ua/usr_certs
Так оно и есть – файлы с именами alexandr7500@meta.ua.key и alexandr7500@meta.ua.csr доступны в директории usr_certs.
Теперь остается создать пользовательский CRT сертификат с помощью следующего запроса:
$ openssl ca -config /etc/nginx/site.ua/main.conf -in /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.csr -out /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.crt -batch
Итак, сертификат был успешно создан.
Таким образом, системой были зарегистрированы следующие значения пользовательских параметров:
countryName :PRINTABLE:'UA' stateOrProvinceName :ASN.1 12:'Kievregion' localityName :ASN.1 12:'Kiev' organizationalUnitName :ASN.1 12:'Alexander' commonName :ASN.1 12:'FreeHost' emailAddress :IA5STRING:'alexandr7500@meta.ua'
Можно убедиться, что сведения по системе были взяты из заполненных нами значений параметров для пользовательского CRT сертификата.
Создание сертификата P12
Теперь нам осталось создать сертификат типа P12, который будет отправлен нами непосредственно удаленному пользователю для его установки на используемом устройстве. Именно он будет использоваться браузером при подключении к серверу. Для этого наберем в терминале следующую команду:
$ openssl pkcs12 -export -in /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.crt -inkey /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.key -out /etc/nginx/site.ua/usr_certs/alexandr7500@meta.ua.p12 -passout pass:789Bbmbm!
Теперь можно загрузить файл с расширением P12 на устройство и передать его пользователю вместе с паролем доступа.
Настройка браузера
Для подключения к веб-серверу пользователю необходимо подключить сертификат к браузеру, используемому на его устройстве. Например, используем браузер Mozilla Firefox для осуществления настроек.
Для этого выбираем следующие команды главного меню браузера:Наслаштування-Додаткові.
В открывшемся окне выбираем команду Просмотр сертификатов и попадаем в окно Управление сертификатами, как показано ниже.
Переходим к закладке Ваши сертификаты и в нижней части окна выбираем команду Импортировать.
Выбираем сертификат, вводим пароль доступа и нажимаем кнопку ОК.
После этого можно перейти на веб-ресурс, для которого был выдан сертификат, выбрать его в выпадающем списке и подтвердить свой выбор. В результате вы должны получить страницу приглашения от веб-сервера Nginx, что будет означать, что доступ к нужному ресурсу открыт.
Удаление и отзыв сертификатов
Для корректного удаления уже сформированных сертификатов необходимо:
- Очистить директорию, в которой хранятся указанные документы (usr_certs в нашем случае);
- Удалить запись пользователя в файле index.txt;
- Удалить последнее число из файла ser_nom.
Также не следует забывать своевременно отзывать выданные сертификаты, если они пользователю уже не нужны. Это обезопасит вас от лишних проблем.
Дата-центр FREEhost.UA предлагает надежные VPS серверы для обучения и высоконагруженных проектов. Круглосуточная техническая поддержка, более 25 шаблонов с наиболее востребованным программным обеспечением для автоматического создания сервера, ежедневное резервное копирование – это лишь часть преимуществ, которые Вы получите, используя наши надежные серверы.
Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем-то ошиблись, или что-то пропустили?
Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.
Дата: 27.10.2023 Автор: Александр Ровник
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus