На базе RouterOS можно развернуть вполне годный сервер Certificate Authority. В нем не будет удобного интерфейса для пользователей, и сами пользователи не смогут через него делать запросы на выпуск сертификатов, но для админских целей данный CA подходит на 100%.
Использовать его будем для:
- выпуска сертификатов для аутентификации пользователей при подключении по OpenVPN;
- выпуска сертификата сервера OpenVPN;
- выпуска сертификатов для шифрования трафика через IPSec (чтобы было посекурнее чем через preshared key, там с какого то обновления сама система предупреждает, что настройка IPSec через ключ небезопасна, и надо настраивать через CA);
- выпуска сертификата SSTP сервера;
С этими задачами CA на базе RouterOS справляется на ура.
Меню управления CA находится в "System=>Certificates"
Мы будем пользоваться только вкладкой "Certificates"
Списки отзыва сертификата (Certificate revocation list - CRL) я не использую, поднимаю обычно сервер CA на том же устройстве, где работает служба OpenVPN, и если у сертификата истёк срок жизни или сертификат мы отзываем, то и без CRL роутер такой сертификат не примет.
Настройки публикации CRL находятся в меню "Settings", на вкладке "Certificates", в этом меню можно указать используем мы вообще CRL в данном CA, и если используем, то где храним список (в оперативке или в файловой системе).
Создание корневого сертификата центра сертификации.
Первым делом, нам потребуется создать сертификат самого сервера CA, для этого на вкладке "Certificates" нажимаем "+", после чего появляется окно создания сертификата, в котором будет три вкладки.
В "General", указываем текстовое описание сертификата (имя сертификата, страна, компания и т.д.), размер ключа шифрования (алгоритм используется RSA) и срок жизни сертификата.
Я обычно заполняю всё по максимуму, в имени сертификата центра сертификации первым символом ставлю нижнее подчёркивание (рекомендую этот символ ставить для всех сертификатов, относящихся к сервисам), чтобы потом не заниматься поиском нужного сертификата в куче пользовательских, система отфильтрует так, что сертификаты, в имени которых первым символом будет нижнее подчеркивание, будут отображаться в начале списка. В имени сертификата СА рекомендую указать название компании, или регион офиса, чтобы в случае, если у вас несколько СА, не запутаться где какой сертификат. Длину ключа ставлю 4096 бит, срок сертификата 10 лет (3650 дней).
На вкладке "Key Usage" задаётся тип сертификата, т.е. для чего он будет использован, сертификатом СА подписываются все сертификаты создаваемые через этот центр сертификации, а также список отзыва сертификатов данного СА, тут выбираем "crl sign" и "key cert sign".
Нажимаем "OK" или "Apply", увидим наш сертификат, с некоторыми его параметрами во вкладке "Certificates", но это пока "болванка" сертификата, которая не имеет закрытого ключа, чтобы этот сертификат стал полноценным, его надо подписать, а т.к. это первый сертификат сервера сертификации, то подписывать этот сертификат будем им же самим (сделаем так называемый "самоподписанный сертификат). Для этого зайдём в сертификат и нажмём кнопку "Sign".
В появившемся меню указываем только адрес хоста, где расположен CRL, это не обязательно делать, но я обычно указываю тут адрес одного из внутренних интерфейсов роутера, на котором развёрнут СА. Для всех остальных сертификатов, здесь же нужно указать каким сертификатом СА их подписываем, но в случае с подписью сертификата СА, это поле оставляем пустым, т.к. ещё нет сертификата, который мог бы подписать этот сертификат.
После нажатия кнопки "ОК", пойдёт процесс генерации ключа для сертификата, на шестой версии RouterOS, этот процесс забирает на себя полностью одно ядро устройства, если процессор одноядерный, то какое то время будет загружен на 100%.
Система сообщит об успешной генерации сертификата надписью "Done" в поле "Progress"
В меню, где показаны сертификаты, изменится статус нашего сертификата на KLAT, это означает что у данного сертификата есть приватный ключ, он является доверенным, в нём есть указание на CRL, и он главный.
Теперь, в сертификате, во вкладке "Status" можно увидеть разную полезную информацию, например до какого числа этот сертификат действителен, присутствует обратный отсчёт до срока истечения.
Корневой сертификат готов, теперь можно создавать другие сертификаты, и подписывать их данным сертификатом.
Создание сертификата для сервера OpenVPN.
Нажимаем "+" и создаём новый сертификат, текстовую часть на вкладке "General" заполняем аналогично корневому сертификату, имя так же с нижним подчёркиванием, размер ключа можно взять любой, я предпочитаю везде создавать четырёх килобитные ключи, срок действия ключа можно ставить любой, если он "протухнет", просто делайте новый сертификат, и меняйте его в сервисе, клиентские сертификаты при этом пересоздавать не надо, я обычно ставлю срок в половину от срока корневого сертификата (5 лет или 1825 дней).
В "Key Usage" выбираем "digital signature", key enciphement" и "tls server"
Нажимаем "Apply", наш сертификат появится в списке, затем нажимаем кнопку "Sign" для подписи созданного сертификата корневым сертификатом. В этот раз в поле СА надо выбрать корневой сертификат, который мы создали ранее.
Этот сертификат получит статус KI, это означает что у него есть приватный ключ и он подписан корневым сертификатом центра сертификации.
Создание сертификатов пользователя для OpenVPN и настройка шаблонов сертификатов.
Сертификат пользователя на вкладке "General", будет содержать ту же текстовую информацию, что и корневой, длина ключа будет та же, имя придумываем какое угодно (хоть фамилию вписываем), по сроку действия сертификатов, советую делать хотя бы 2 года (730 дней), т.к. если пользователей несколько сотен, завязните в постоянных заявках на смену сертификата.
"Key Usage" для этого сертификата будет только "tls client".
Не забываем подписать.
Немного автоматизируем процесс создания сертификатов, создадим шаблон, который будет содержать общую для всех сертификатов текстовую информацию, а так же величину ключа, срок действия и где будут отмечены все нужные параметры в "key usage". Этот шаблон будет лежать в системе в виде неподписанного сертификата, и при создании нового сертификата можно будет зайти в шаблон, нажать кнопку "Copy", это создаст новый сертификат на основе нашего шаблона, и останется только заполнить поля "Name" и подписать сертификат. Имя шаблона советую делать так же с нижним подчёркиванием, чтобы он не затерялся и был всегда на виду. Самое главное, случайно не подписать шаблон, иначе придётся новый создавать.
Создание сертификата для IPSec.
Собственно по вкладке "General" всё аналогично как и для предыдущих сертификатов, нужно выбрать срок жизни сертификата, и имя, причём для настройки IPSec между двумя роутерами, потредуется 2 сертификата (для обоих роутеров), причём сертификаты по типу будут абсолютно одинаковыми, я предпочитаю указывать в названии тип протокола, краткое название обоих офисов, у указывать клиентский это сертификат или серверный, например так : _ipsec-hq-branch-srv и _ipsec-hq-branch-client (так будет именоваться пара сертификатов для ipsec между центральным офисом и удалённым офисом).
"Key usage" для такого типа сертификата будет "digital signature" и "key encipherment".
Если у вам много офисов, для которых нужно настраивать IPSec, то имеет смысл сделать шаблон для таких сертификатов.
Создание сертификата для сервиса SSTP VPN.
По вкладке "General", такой сертификат немного отличается от остальных, добавляем поле "Subject Alt. Name", выбираем тип записи IP адрес (куда мы вписываем внешний адрес, на который будут подключаться клиенты), или DNS запись (имя, если в нашей зоне есть запись типа А для VPN сервера). "Key Usage" будет такой же как у сертификата для OpenVPN сервера ("digital signature", key encipherment" и "tls server").
или
Действия, которые можно делать с сертификатами.
- Сертификат можно выгрузить в файловую систему RouterOS (и сам сертификат, и ключевой файл с приватным ключом). Это бывает нужно например при настройке sstp подключения: в хранилище "доверенные корневые сертификаты" на клиентском ПК загружаем цепочку соответствующих сертификатов (корневой сертификат и сертификат сервера sstp).
Для этого можно зайти в сертификат и нажать кнопку "Export"
или в списке сертификатов, нажать правой кнопкой мыши на сертификате, в выпадающем меню выбрать пункт "Export"
Появится выпадающее меню, где мы можем выбрать формат выгружаемого сертификата (по умолчанию PEM), задать парольную фразу на ключевой файл (если в меню настройки winbox снята галка "Hide Passwords", парольная фраза будет видна в интерфейсе), и указать имя файла сертификата.
Если парольную фразу не указывать, то экспортируется сертификат без приватного ключа, если парольная фраза указана, то сертификат экспортируется с приватным ключом. В случае экспорта в формате PEM, сертификат экспортируется в виде двух файлов, сам сертификат будет иметь расширение .crt, а файл с приватным ключом будет иметь расширение .key, можно выгрузить сертификат в формате PKCS12, тогда это будет один файл, содержащий в себе и сертификат и приватный ключ, файл будет с расширением .p12
Файлы сертификатов появляются в корне файловой системы, которую можно просмотреть, зайдя во меню "Files"
Переместить файлы из RouterOS в папку на своём ПК можно через drug&drop.
2. Сертификат можно импортировать в центр сертификации роутера, в том числе и вместе с приватным ключом (это требуется при настройке IPSec, когда для роутеров создаём сертификаты на одном СА, а потом импортируем созданные сертификаты в роутеры, сети которых объединяем через IPSec).
Кнопка импорт находится на вкладке "Certificates", в меню настроек СА.
Раскрываем поле "File Name", система покажет все файлы сертификатов, находящиеся в файловой системе роутера, которые можно импортировать (в том числе и ключевые файлы)
Если импортируем только сертификат (без приватного ключа), то выбираем нужный файл с расширением .crt и на этом все, если мы импортируем полноценный сертификат с секретным ключом, по после импорта файла .crt, мы импортируем файл .key и указываем парольную фразу в поле passphrase.
В случае с форматом PKCS12, файл будет один, если не указать парольную фразу импортнётся только сертификат, если указать парольную фразу, сертификат импортнётся с приватным ключом.
3. Сертификат можно отозвать, выделив его и и нажав кнопку "Revoke".
Система спросит, действительно ли мы хотим отозвать сертификат, соглашаемся, и сертификат изменит статус с KI (private key, issued), на KR (private key, revoked).
Когда когда у сертификата истекает срок, он меняет статус на KE (private key, expired).