Автоматическое распространение ключей и сертификатов X.509
Общее описание инфраструктуры открытых ключей
Инфраструктура открытых ключей (она же - Public Key Infrastructure, PKI) - комплекс средств, мер и политик, обеспечивающих работу систем на базе алгоритмов шифрования с открытым ключом.
К участникам PKI обычно относят:
- Удостоверяющий центр (УЦ)
- Регистрационный центр (РЦ)
- Клиент
В процессе взаимодействия участников PKI появляются и используются следующие объекты:
- Приватный ключ
- Публичный ключ
- Запрос на сертификацию
- Сертификат
- Список отозванных сертификатов
Схематично основные процедуры в инфраструктуре открытых ключей можно описать следующим образом:
- Клиент генерирует у себя приватный ключ.
- Клиент формирует запрос на сертификацию, включающий в себя публичный ключ, парный к раннее сгенерированному приватному ключу, информацию о владельце приватного ключа и запрашиваемые опции, которые затем могут быть добавлены в выпускаемый сертификат.
- Клиент доставляет запрос на сертификацию в удостоверяющий центр. При наличии в структуре PKI регистрационного центра запрос от клиента будет приходить на него и после валидации будет уходить в удостоверяющий центр.
- Удостоверяющий центр на основании клиентского запроса на сертификацию выпишет сертификат, содержащий всю клиентскую информацию и информацию о самом УЦ. Сам сертификат будет подписан приватным ключом УЦ, тем самым данные в клиентском сертификате не смогут быть изменены третьей стороной. От УЦ сертификат передается клиенту.
- Теперь клиенты могут, используя свой приватный ключ, подписывать данные в рамках используемых процессов (в нашем случае - сетевых протоколов) при отправке и валидировать данные при помощи публичного сертификата на приёме.
Планирование инфраструктуры открытых ключей
Сервисные маршрутизаторы ESR могут принимать участие в структуре PKI в качестве корневого удостоверяющего центра и клиента PKI. Перед развертыванием инфраструктуры PKI крайне важно её спланировать для обеспечения её безопасности и стабильной работы.
Вот основные рекомендации по планированию инфраструктуры открытых ключей:
- Определите роли устройств в структуре PKI.
- Определите схему именования сертификатов.
- Определите политику доступа к центру сертификации и механизмы ограничения доступа к нему от недоверенных клиентов.
- Обеспечьте актуальность времени на всех хостах, используемых в структуре PKI.
Настройка PKI-сервера в роли корневого удостоверяющего центра
Самый базовый вариант настройки PKI-сервера - корневой удостоверяющий центр, работающий на самоподписанных сертификатах, который напрямую обслуживает запросы конечных клиентов.
Изменение отличительного имени сертификата удостоверяющего центра приводит к перегенерации приватного ключа и сертификата PKI-сервера и очистке базы выписанных сертификатов. В связи с этим рекомендуется заранее, на этапе планирования структуры PKI определиться с идентификацией владельца удостоверяющего центра и после ввода удостоверяющего центра в эксплуатацию не менять эти настройки!
Алгоритм настройки
| Шаг | Описание | Команда | Ключи |
|---|---|---|---|
| 1 | Настроить NTP-клиент согласно статьи "Алгоритм настойки NTP". Маршрутизатор должен получать точное время от NTP-сервера или NTP-пира, либо доверять локально настроенному времени с включенным режимом NTP Master. |
| |
| 2 | Перейти в режим настройки PKI-сервера. | esr(config)# crypto pki server | |
| 3 | Перейти в режим настройки отличительного имени сертификата - набора атрибутов, уникально описывающих удостоверяющий центр. | esr(config-pki-server)# subject-name | |
| 4 | Указать код страны (необязательно). | esr(config-pki-server-subject-name)# country <COUNTRY> | <COUNTRY> – код страны, задаётся строкой длиной 2 символа. Рекомендуется использовать двухбуквенные обозначения стран "alpha-2" из стандарта ISO 3166-1. |
| 5 | Указать название штата, области или провинции (необязательно). | esr(config-pki-server-subject-name)# state <STATE> | <STATE> – название штата, области или провинции, задаётся строкой от 1 до 128 символов. |
| 6 | Указать название населенного пункта или его территориальной единицы (необязательно). | esr(config-pki-server-subject-name)# locality <LOCATION> | <LOCATION> – название населенного пункта или его территориальной единицы, задаётся строкой от 1 до 128 символов. |
| 7 | Указать название организации (необязательно). | esr(config-pki-server-subject-name)# organization <ORGANIZATION> | <ORGANIZATION> – название организации, задаётся строкой от 1 до 64 символов. |
| 8 | Указать подразделение организации (необязательно). | esr(config-pki-server-subject-name)# organization-unit <ORGANIZATION-UNIT> | <ORGANIZATION-UNIT> – название подразделения организации, задаётся строкой от 1 до 64 символов. |
| 9 | Указать общее имя сертификата. | esr(config-pki-server-subject-name)# common-name <COMMON-NAME> | <COMMON-NAME> – общее имя, задаётся строкой от 1 до 64 символов. Чаще всего в качестве общего имени сертификата удостоверяющего ццентра используется имя домена, который обслуживает удостоверяющий центр или юридическое название удостоверяющего центра. |
| 10 | Указать IP-адрес или сетевой интерфейс, который будет будет прослушиваться PKI-сервером для обработки входящих запросов (необязательно). В случае, если настройка не будет указана PKI-сервер будет принимать запросы на всех настроенных IP-интерфейсах маршрутизатора. | esr(config-pki-server)# source-address <ADDR> | <ADDR> – IP-адрес, назначенный на локальном сетевом интерфейсе маршрутизатора, на котором PKI-сервер будет слушать входящие подключения, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
| esr(config-pki-server)# source-interface <IF> | <IF> – интерфейс или туннель, на котором PKI-сервер будет слушать входящие подключения. | ||
| 11 | Указать challenge-password, который будет использован для аутентификации PKI-клиентов, желающих выписать сертификат (необязательно). | esr(config-pki-server)# challenge-password { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 32 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 32 байт (от 16 до 64 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
| 12 | Указать время жизни выписываемых клиентам сертификатов в днях. | esr(config-pki-server)# lifetime <DAYS> | <DAYS> – количество дней, принимает значения в диапазоне [1..3650]. Значение по умолчанию: 365. |
| 13 | Включить PKI-сервер. | esr(config-pki-server)# enable |
Пример настройки
Задача:
Настроить на маршрутизаторе PKI-сервер в роли корневого удостоверяющего центра. Клиентские сертификаты должны иметь срок жизни - две недели с момента выпуска.
В качестве начальной конфигурации на маршрутизаторе уже настроен сетевой интерфейс в сторону интернет-провайдера, прописан шлюз по умолчанию и настроена зона безопасности. Шлюз интернет-провайдера также может служить источником синхронизации времени по протоколу NTP.
hostname ESR.CA security zone WAN exit interface gigabitethernet 1/0/1.103 security-zone WAN ip address 10.0.103.2/30 exit ip route 0.0.0.0/0 10.0.103.1
Решение:
Настроим NTP-клиент на получение точного времени от шлюза интернет-провайдера:
ESR.CA(config)# ntp enable ESR.CA(config)# ntp server 10.0.103.1 ESR.CA(config-ntp-server)# exit ESR.CA(config)#
Перейдем к настройке PKI-сервера:
ESR.CA(config)# crypto pki server ESR.CA(config-pki-server)#
Перейдем в раздел настройки отличительного имени сертификата удостоверяющего центра. Настроим те атрибуты, которые позволят однозначно идентифицировать удостоверяющий центр:
ESR.CA(config-pki-server)# subject-name ESR.CA(config-pki-server-subject-name)# country RU ESR.CA(config-pki-server-subject-name)# state Moscow ESR.CA(config-pki-server-subject-name)# locality Moscow ESR.CA(config-pki-server-subject-name)# organization Company ESR.CA(config-pki-server-subject-name)# common-name ca.company.loc ESR.CA(config-pki-server-subject-name)# exit ESR.CA(config-pki-server)#
Привяжем PKI-сервер к адресу сетевого интерфейса, смотрящего в сторону интернет-провайдера:
ESR.CA(config-pki-server)# source-interface gi 1/0/1.103 ESR.CA(config-pki-server)#
Зададим challenge-password, для корректного обращения к удостоверяющему центру PKI-клиенты должны использовать правильный challenge-password.
ESR.CA(config-pki-server)# challenge-password StR0nnGP+ss ESR.CA(config-pki-server)#
Зададим время жизни выписываемых клиентам сертификатов:
ESR.CA(config-pki-server)# lifetime 14 ESR.CA(config-pki-server)#
Включим PKI-сервер:
ESR.CA(config-pki-server)# enable ESR.CA(config-pki-server)# exit ESR.CA(config)#
Добавим пару зон безопасности и правило, разрешающее прохождение входящего на PKI-сервер трафика:
ESR.CA(config)# security zone-pair WAN self ESR.CA(config-security-zone-pair)# rule 10 ESR.CA(config-security-zone-pair-rule)# description "Allow access to PKI-server from WAN" ESR.CA(config-security-zone-pair-rule)# match protocol tcp ESR.CA(config-security-zone-pair-rule)# match destination-port port-range 80 ESR.CA(config-security-zone-pair-rule)# match destination-address address-range 10.0.103.2 ESR.CA(config-security-zone-pair-rule)# action permit ESR.CA(config-security-zone-pair-rule)# enable ESR.CA(config-security-zone-pair-rule)# exit ESR.CA(config-security-zone-pair)# exit ESR.CA(config)#
Применим конфигурацию на маршрутизаторе:
ESR.CA(config)# end Warning: you have uncommitted configuration changes. ESR.CA# commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. ESR.CA# confirm Configuration has been confirmed. Commit timer canceled. ESR.CA#
В результате получим запущенный корневой удостоверяющий центр, готовый к обслуживанию клиентских запросов. В команде "show crypto pki server" можно увидеть fingerprint сертификата удостоверяющего центра, который необходимо использовать в клиентах PKI совместно с установленным challenge-password для корректной авторизации:
ESR.CA# show crypto pki server Status: Enabled Lifetime days: 14 Certificate fingerprint: 79:D2:B6:7E:DF:77:2D:C5:27:68:99:10:BA:EC:D2:47 Source: gigabitethernet 1/0/1.103 Last issued serial number: -- Challenge password: Active ESR.CA#
Настройка PKI-клиента
Изменение отличительного имени клиентского сертификата или URL подключения к PKI-серверу приводит к немедленному перезапросу нового сертификата у удостоверяющего центра.
Алгоритм настройки
| Шаг | Описание | Команда | Ключи |
|---|---|---|---|
| 1 | Перейти в режим настройки PKI-клиента. | esr(config)# crypto pki trustpoint <TRUSTPOINT> | <TRUSTPOINT> – имя PKI-клиента, задаётся строкой от 1 до 31 символа. |
| 2 | Перейти в режим настройки отличительного имени сертификата - набора атрибутов, уникально описывающих владельца сертификата. | esr(config-trustpoint)# subject-name | |
| 3 | Указать код страны (необязательно). | esr(config-trustpoint-subject-name)# country <COUNTRY> | <COUNTRY> – код страны, задаётся строкой длиной 2 символа. Рекомендуется использовать двухбуквенные обозначения стран "alpha-2" из стандарта ISO 3166-1. |
| 4 | Указать название штата, области или провинции (необязательно). | esr(config-trustpoint-subject-name)# state <STATE> | <STATE> – название штата, области или провинции, задаётся строкой от 1 до 128 символов. |
| 5 | Указать название населенного пункта или его территориальной единицы (необязательно). | esr(config-trustpoint-subject-name)# locality <LOCATION> | <LOCATION> – название населенного пункта или его территориальной единицы, задаётся строкой от 1 до 128 символов. |
| 6 | Указать название организации (необязательно). | esr(config-server-subject-name)# organization <ORGANIZATION> | <ORGANIZATION> – название организации, задаётся строкой от 1 до 64 символов. |
| 7 | Указать подразделение организации (необязательно). | esr(config-trustpoint-subject-name)# organization-unit <ORGANIZATION-UNIT> | <ORGANIZATION-UNIT> – название подразделения организации, задаётся строкой от 1 до 64 символов. |
| 8 | Указать общее имя сертификата. | esr(config-trustpoint-subject-name)# common-name <COMMON-NAME> | <COMMON-NAME> – общее имя, задаётся строкой от 1 до 64 символов. Чаще всего в качестве общего имени клиентского сертификата используется полное доменное имя хоста, который использует данный клиентский сертификат или ФИО пользователя, использующего клиентский сертификат. |
| 9 | Перейти в режим настройки альтернативных имен сертификата (необязательно). | esr(config-trustpoint)# subject-alt-name | |
| 10 | Указать IP-адрес в качестве альтернативного имени сертификата (необязательно). | esr(config-trustpoint-san)# ipv4 <ADDR> | <ADDR> – IP-адрес, задаётся в виде AAA.BBB.CCC.DDD, где каждая часть принимает значения [0..255]. |
| esr(config-trustpoint-san)# ipv6 <IPV6-ADDR> | <IPV6-ADDR> – IPv6-адрес, задаётся в виде X:X:X:X::X, где каждая часть принимает значения в шестнадцатеричном формате [0..FFFF]. | ||
| 11 | Указать полное доменное имя хоста в качестве альтернативного имени сертификата (необязательно). | esr(config-trustpoint-san)# dns <NAME> | <NAME> – полное доменное имя хоста (FQDN), задается строкой от 1 до 235 символов. Пример записи доменного имени – router.example.loc. |
| 12 | Указать адрес электронной почты в качестве альтернативного имени сертификата (необязательно). | esr(config-trustpoint-san)# email <EMAIL> | <EMAIL> – адрес электронной почты, задается строкой от 6 до 254 символов. Пример записи электронной почты – router@example.loc. |
| 13 | Указать URL для подключения к PKI-серверу. | esr(config-trustpoint)# url <URL> | <URL> – URL для подключения к PKI-серверу, задается в виде "http:// <ADDR>[:<PORT>]/", где:
В случае если PKI-сервер расположен на том же маршрутизаторе, на котором настраивается PKI-клиент необходимо указать в URL любой из IP-интерфейсов, которые слушает PKI-сервер. |
| 14 | Указать цифровой отпечаток сертификата PKI-сервера, к которому выполняется подключение. | esr(config-trustpoint)# fingerprint <FINGERPRINT> | <FINGERPRINT> – значение цифровой отпечаток сертификата, полученного при помощи алгоритма MD5. Имеет размер 16 байт и задается в виде HEX-строки длиной 32 символа без разделителей (YYYY...) или 47 символов с двоеточием в роли разделителя (YY:YY:YY...). |
| 15 | Указать challenge-password, который будет использован для аутентификации на PKI-сервере (необязательно). | esr(config-trustpoint)# challenge-password { <CLEAR-TEXT> | encrypted <ENCRYPTED-TEXT> } | <CLEAR-TEXT> – пароль, задаётся строкой от 8 до 32 символов; <ENCRYPTED-TEXT> – зашифрованный пароль размером от 8 байт до 32 байт (от 16 до 64 символов) в шестнадцатеричном формате (0xYYYY...) или (YYYY...). |
| 16 | Включить PKI-клиент. | esr(config-trustpoint)# enable |
Пример настройки PKI-клиента для подключения к корневому удостоверяющему центру
Задача:
Настроить на маршрутизаторе PKI-клиент так, чтобы он успешно подключался к удостоверяющему центру. В качестве удостоверяющего центра рассмотрим полностью настроенный PKI-сервер из предыдущего пункта документации. Помимо настройки отличительного имени сертификата настроим в качестве альтернативного имени IP-адрес маршрутизатора и его полное доменное имя.
В качестве начальной конфигурации на маршрутизаторе уже настроен сетевой интерфейс в сторону интернет-провайдера, прописан шлюз по умолчанию и настроена зона безопасности. Шлюз интернет-провайдера также может служить источником синхронизации времени по протоколу NTP.
hostname ESR.CA
security zone WAN
exit
interface gigabitethernet 1/0/1.103
security-zone WAN
ip address 10.0.103.2/30
exit
security zone-pair WAN self
rule 10
description "Allow access to PKI-server from WAN"
action permit
match protocol tcp
match destination-address address-range 10.0.103.2
match destination-port port-range 80
enable
exit
exit
ip route 0.0.0.0/0 10.0.103.1
ntp enable
ntp server 10.0.103.1
exit
crypto pki server
challenge-password StR0nnGPass
subject-name
common-name ca.company.loc
organization Company
locality Moscow
state Moscow
country RU
exit
lifetime 14
source-interface gigabitethernet 1/0/1.103
enable
exit
hostname ESR.R1 security zone WAN exit interface gigabitethernet 1/0/1.113 security-zone WAN ip address 10.0.113.2/30 exit ip route 0.0.0.0/0 10.0.113.1
Решение:
Настроим NTP-клиент на получение точного времени от шлюза интернет-провайдера:
Настройка NTP-клиента для работы PKI-клиента не является обязательной, в отличие от конфигурирования PKI-сервера. Но в связи с чувствительностью инфраструктуры открытых ключей к актуальности времени на узлах, использующих выписанные сертификаты настройка NTP рекомендуется и на клиентской стороне.
ESR.R1(config)# ntp enable ESR.R1(config)# ntp server 10.0.113.1 ESR.R1(config-ntp-server)# exit ESR.R1(config)#
Перейдем к настройке PKI-клиента:
ESR.R1(config)# crypto pki trustpoint TP_R1 ESR.R1(config-trustpoint)#
Перейдем в раздел настройки отличительного имени клиентского сертификата. Настроим те атрибуты, которые позволят однозначно идентифицировать клиента:
ESR.R1(config-trustpoint)# subject-name ESR.R1(config-trustpoint-subject-name)# country RU ESR.R1(config-trustpoint-subject-name)# state Moscow ESR.R1(config-trustpoint-subject-name)# locality Moscow ESR.R1(config-trustpoint-subject-name)# organization Company ESR.R1(config-trustpoint-subject-name)# common-name r1.company.loc ESR.R1(config-trustpoint-subject-name)# exit ESR.R1(config-trustpoint)#
Перейдем в раздел настройки альтернативных имен сертификата. Укажем в качестве альтернативных имен IP-адрес и полное доменное имя:
ESR.R1(config-trustpoint)# subject-alt-name ESR.R1(config-trustpoint-san)# ipv4 10.0.113.2 ESR.R1(config-trustpoint-san)# dns r1.company.loc ESR.R1(config-trustpoint-san)# exit ESR.R1(config-trustpoint)#
Укажем URL подключения к удостоверяющему центру:
ESR.R1(config-trustpoint)# url http://10.0.103.2/ ESR.R1(config-trustpoint)#
Укажем цифровой отпечаток сертификата удостоверяющего центра, при несовпадении настроенного в конфигурации PKI-клиента отпечатка с отпечатком сертификата, которым представится сам удостоверяющий центр процесс выпуска сертификата будет прерван. На сервисных маршрутизаторах ESR получить цифровой отпечаток сертификата удостоверяющего центра можно из вывода команды "show crypto pki server":
ESR.R1(config-trustpoint)# fingerprint 79:D2:B6:7E:DF:77:2D:C5:27:68:99:10:BA:EC:D2:47 ESR.R1(config-trustpoint)#
Зададим challenge-password, для корректного обращения к удостоверяющему центру:
ESR.R1(config-trustpoint)# challenge-password StR0nnGP+ss ESR.R1(config-trustpoint)#
Включим PKI-клиент:
ESR.R1(config-trustpoint)# enable ESR.R1(config-trustpoint)# exit ESR.R1(config)#
Поскольку трафик PKI-клиента исходящий - дополнительных правил фильтрации в Zone-Based Firewall добавлять не требуется.
Применим конфигурацию на маршрутизаторе:
ESR.R1(config)# end Warning: you have uncommitted configuration changes. ESR.R1# commit Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds. ESR.R1# confirm Configuration has been confirmed. Commit timer canceled. ESR.R1#
В результате получим настроенный PKI-клиент, который сразу после запуска обратится к удостоверяющему центру за выпуском сертификата. Отследить состояние настроенных PKI-клиентов можно командой "show crypto pki trustpoints":
ESR.R1# show crypto pki trustpoints
Name Enrollment Subject name Status Next action
--------------- ---------- ------------------------------ --------------- --------------------
TP_R1 SCEP /CN=r1.company.loc/O=Company/L Ready 2025-11-02 11:35:39
=Moscow/ST=Moscow/C=RU
ESR.R1#
Более подробную информацию о PKI-клиенте можно посмотреть, если выполнить команду "show crypto pki trustpoint" с указанием имени PKI-клиента:
ESR.R1# show crypto pki trustpoint TP_R1 Name: TP_R1 Enrollment: SCEP Subject name: /CN=r1.company.loc/O=Company/L=Moscow/ST=Moscow/C=RU Challenge password: Active Status: Ready Renew date: 2025-11-02 11:35:39 ESR.R1#
Процесс автоматического перевыпуска сертификата PKI-клиента
При успешном получении сертификата от удостоверяющего центра PKI-клиент вычитывает период действия сертификата и за 20% времени до его истечения планирует процедуру перевыпуска нового сертификата. Дата запланированного перевыпуска сертификата соответствующего PKI-клиента присутствует в графе "Renew date" вывода команды "show crypto pki trustpoint" с указанием имени конкретного PKI-клиента:
ESR.R1# show crypto pki trustpoint TP_R1 Name: TP_R1 Enrollment: SCEP Subject name: /CN=r1.company.loc/O=Company/L=Moscow/ST=Moscow/C=RU Challenge password: Active Status: Ready Renew date: 2025-11-02 11:35:39 ESR.R1#
При наступлении этого времени PKI-клиент запустит процедуру перевыпуска сертификата и в случае успеха заменит текущий сертификат на новый. На это укажет как факт смены запланированной даты перевыпуска сертификата, так и новый серийный номер сертификата:
ESR.R1# show crypto pki trustpoint TP_R1 cert | include "Serial" Serial: 04:7E:C0:EF:F7:D0:46:53:AF:9D:C8:EE:17:A6:14:CC ESR.R1# show crypto pki trustpoint TP_R1 Name: TP_R1 Enrollment: SCEP Subject name: /CN=r1.company.loc/O=Company/L=Moscow/ST=Moscow/C=RU Challenge password: Active Status: Ready Renew date: 2025-11-02 11:35:39 ESR.R1#
ESR.R1# show date "2025-11-02 11:35:46" ESR.R1# show crypto pki trustpoint TP_R1 Name: TP_R1 Enrollment: SCEP Subject name: /CN=r1.company.loc/O=Company/L=Moscow/ST=Moscow/C=RU Challenge password: Active Status: Ready Renew date: 2025-11-13 18:21:11 ESR.R1# show crypto pki trustpoint TP_R1 cert | include "Serial" Serial: 10:34:38:55:CE:D1:4A:98:A5:0E:3F:9E:32:77:E7:22 ESR.R1#
В базе сертификатов удостоверяющего центра, в свою очередь, выписанный раннее клиентский сертификат будет отозван:
ESR.CA# show crypto pki server database
Serial State Issue date Expiration Revocation Subject name
date date
----------------------------------------------- --------- ---------- ---------- ---------- ------------------------------
04:7E:C0:EF:F7:D0:46:53:AF:9D:C8:EE:17:A6:14:CC Revoked 2025-10-22 2025-11-05 2025-11-02 /CN=r1.company.loc/O=Company/L
06:47:39 06:47:39 11:36:01 =Moscow/ST=Moscow/C=RU
10:34:38:55:CE:D1:4A:98:A5:0E:3F:9E:32:77:E7:22 Valid 2025-11-02 2025-11-16 -- /CN=r1.company.loc/O=Company/L
11:36:01 08:02:34 =Moscow/ST=Moscow/C=RU
ESR.CA#
Процесс автоматического перевыпуска сертификата PKI-сервера
В текущей версии ПО маршрутизаторов ESR автоматический перевыпуск сертификата PKI-сервера не реализован. Самоподписанный сертификат удостоверяющего центра генерируется на этапе настройки PKI-сервера сроком на 10 лет с момента генерации. Поддержка перевыпуска сертификата удостоверяющего центра будет поддержана в одном из следующих релизов.
Ручная генерация и распространение ключей и сертификатов X.509
Процесс выпуска сертификатов и ключей для маршрутизаторов ESR может быть и ручным. Небольшой набор команд позволяет администратору формировать приватный ключ, сгенерировать по нему запрос на сертификацию и отправить его на удаленный хост, откуда его уже можно будет доставить в УЦ для выпуска сертификата. Пользовательский сертификат, а также сопутствующие файлы могут быть загружены обратно на ESR для дальнейшего использования в сервисах маршрутизатора.
Алгоритм генерации ключей и запросов на сертификацию
| Шаг | Описание | Команда | Ключи |
|---|---|---|---|
| 1 | Сгенерировать приватный ключ RSA. | esr# crypto generate private-key rsa <KEY-SIZE> filename <NAME>
| <KEY-SIZE> – размер ключа в битах. Значение может находится в диапазоне от 1024 до 4096; <NAME> – имя файла приватного ключа, задаётся строкой до 31 символа. |
| 2 | Сформировать запрос на сертификацию. | esr# crypto generate csr private-key <PRIVATE-KEY> [[alternative-name <ALT-NAME>][common-name <COMMON-NAME>][country <COUNTRY>][email-address <E-MAIL>][locality <LOCATION>][organization <ORGANIZATION>][organizational-unit <ORGANIZATION-UNIT>][state <STATE>]] filename <NAME>
| <PRIVATE-KEY> – имя файла приватного ключа, задаётся строкой до 31 символа; <ALT-NAME> – альтернативное имя сертификата, задаётся строкой от 5 до 255 символов в формате <TYPE>:<VALUE>, где:
<COMMON-NAME> – общее имя, задаётся строкой от 1 до 64 символов. Чаще всего в качестве общего имени клиентского сертификата используется полное доменное имя хоста, который использует данный клиентский сертификат или ФИО пользователя, использующего клиентский сертификат; <COUNTRY> – код страны, задаётся строкой длиной 2 символа. Рекомендуется использовать двухбуквенные обозначения стран "alpha-2" из стандарта ISO 3166-1; <E-MAIL> – адрес электронной почты, задаётся строкой от 3 до 64 символов; <LOCATION> – название населенного пункта или его территориальной единицы, задаётся строкой от 1 до 128 символов; <ORGANIZATION> – название организации, задаётся строкой от 1 до 64 символов; <ORGANIZATION-UNIT> – название подразделения организации, задаётся строкой от 1 до 64 символов; <STATE> – название штата, области или провинции, задаётся строкой от 1 до 128 символов; <NAME> – имя файла запроса на сертификацию, задаётся строкой до 31 символа. |
| 3 | Выгрузить запрос на сертификацию с устройства. | esr# copy crypto:csr/<CERT-REQ> <DESTINATION> | <CERT-REQ> – имя файла запроса на сертификацию, задаётся строкой до 31 символа; <DESTINATION> – локальное или удаленное файловое хранилище, куда будет выгружен запрос на сертификацию. Полный список возможных вариантов и синтаксис их описания подробно указан в описании команды "copy" в справочнике команд CLI. |
| 4 | Загрузить на устройство клиентский сертификат, выписанный удостоверяющим центром. | esr# copy <SOURCE> crypto:cert/<CERT> | <SOURCE> – локальное или удаленное файловое хранилище, откуда будет загружен файл клиентского сертификата. Полный список возможных вариантов и синтаксис их описания подробно указан в описании команды "copy" в справочнике команд CLI; <CERT> – имя файла клиентского сертификата, задаётся строкой до 31 символа. |
| 5 | Загрузить на устройство сертификат удостоверяющего центра. | esr# copy <SOURCE> crypto:cert/<CA-CERT> | <SOURCE> – локальное или удаленное файловое хранилище, откуда будет загружен файл сертификата удостоверяющего центра. Полный список возможных вариантов и синтаксис их описания подробно указан в описании команды "copy" в справочнике команд CLI; <CA-CERT> – имя файла сертификата удостоверяющего центра, задаётся строкой до 31 символа. |
| 6 | Загрузить на устройство список отозванных сертификатов удостоверяющего центра. | esr# copy <SOURCE> crypto:crl/<CRL> | <SOURCE> – локальное или удаленное файловое хранилище, откуда будет загружен файл со списком отозванных сертификатов. Полный список возможных вариантов и синтаксис их описания подробно указан в описании команды "copy" в справочнике команд CLI; <CRL> – имя файла со списком отозванных сертификатов, задаётся строкой до 31 символа. |
Пример ручного выпуска сертификата через внешний удостоверяющий центр
Задача:
Сгенерировать на ESR приватный RSA ключ и сформировать запрос на сертификацию. Помимо настройки отличительного имени сертификата настроим в качестве альтернативного имени его полное доменное имя.
Решение:
Для удобства дальнейшей идентификации ключей и сертификатов рекомендуется использовать в качестве имен файлов доменное имя хоста, для которого формируется ключевая пара и префикс сервиса.
Поскольку сертификаты (как клиентские, так и самого удостоверяющего центра) имеют ограниченный срок действия, то отслеживание истечения срока действия сертификатов и их своевременный перевыпуск полностью находится в зоне ответственности администратора маршрутизатора.
Сгенерируем приватный ключ RSA:
При генерации ключей RSA рекомендуется использовать ключи длиной 2048 бит и более.
ESR.R1# crypto generate private-key rsa 2048 filename r1.company.loc.key .....+.......+..+..........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.........+..+.+...+.........+..+...+......+....+...+........+ .......+........+.+......+.........+........................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.+...+......+.....+......+.......+......+......+.....+...+...............+.+..... .+.....+.+.....+...+.......+.....+...+....+...+..+............+......+....+........+.+..+............+.+...........+..................+...+....+...........+.........+....+..+.......+......+......+........+...........................+..... ........+...+.........+.....+.+...+............+..+..........+..+...+.+..+...+................+.....+.+........+.+.....+....+...........+...+...+...+.......+........+..........+..+.........+...+...+...+.+...+......+......+......+...+..... .........+.+.....+.+...+..+...+.......+......+............+......+.........+.....+.+............+.....+....+...+...+.................+...+.......+..+.+............+..+.+...+.....+....+...............+...........+....+...+................. +.+...........+...+.+.....+.+...+...........+..........+.....+.........+...+....+..............+.+........+...+....+......+........+.+......+..+.+....................+....+......+..+...+................+...+........+.......+...........+.+ ......+..+.+......+.....+...+......+.......+........+.+......+........+......+.+...+...........................+........+.+...+...........+.+.....+.+.........+...+.....+.......+.....+......+...+......+.....................+..........+..+. .....+......+.+..............+.+.....+....+...+...........+......+....+.....+....+...+...+..+............+.+.................+...+.+..............+............+.........+......+....+......+...+.........+..+.+..+.+..+...................... +........+.......+..+....+......+......+..+...+..........+...........................+............+.....+...+.+.....+....+...+.....+....+...+...........+......+.+...+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ESR.R1#
Сформируем запрос на сертификацию:
ESR.R1# crypto generate csr private-key r1.company.loc.key country RU state Moscow locality Moscow organization Company common-name r1.company.loc email-address netmaster@company.loc alternative-name DNS:r1.company.loc filename r1.company.loc.csr ESR.R1#
Выгрузим сформированный запрос на сертификацию на внешний TFTP-сервер для дальнейшей доставки в удостоверяющий центр:
ESR.R1# copy crypto:csr/r1.company.loc.csr tftp://10.0.113.1:/r1.company.loc.csr |******************************************| 100% (1094B) Success! ESR.R1#
Процесс доставки запроса на сертификацию в удостоверяющий центр и непосредственно сам выпуск сертификата индивидуален для каждого удостоверяющего центра и не рассматривается в данном разделе руководства.
После успешного выпуска сертификата удостоверяющим центром загрузим клиентский сертификат, сертификат удостоверяющего центра и список отозванных сертификатов на маршрутизатор:
ESR.R1# copy tftp://10.0.113.1:/ca.crt crypto:cert/ca.crt |******************************************| 100% (2264B) Crypto file loaded successfully! ESR.R1# copy tftp://10.0.113.1:/ca.crl crypto:crl/ca.crl |******************************************| 100% (1064B) Crypto file loaded successfully! ESR.R1# copy tftp://10.0.113.1:/r1.company.loc.crt crypto:cert/r1.company.loc.crt |******************************************| 100% (1931B) Crypto file loaded successfully! ESR.R1#
Посмотреть итоговое содержимое сертификата можно командой "show crypto certificates":
ESR.R1# show crypto certificates cert r1.company.loc.crt
Version: 3
Serial: 4096
Subject name:
C(countryName): RU
ST(stateOrProvinceName): Moscow
O(organizationName): Company
CN(commonName): r1.company.loc
emailAddress(emailAddress): netmaster@company.loc
Issuer name:
C(countryName): RU
ST(stateOrProvinceName): Moscow
L(localityName): Moscow
O(organizationName): Company
CN(commonName): Company Root Certificate Authority
Validity period:
Valid after: 2025-10-28 03:26:41
Invalid after: 2025-11-27 03:26:41
Signature:
Algorithm: sha256WithRSAEncryption
Value: 37:6D:30:DE:C3:EF:D8:06:D6:4B:AA:AC:6A:78:65:C2:7C:7B:
EA:E9:F6:C0:A7:0F:9B:01:D2:C6:05:95:43:A1:C6:7B:F7:43:
F7:BE:78:7F:BA:65:73:88:31:91:C5:4F:FA:BF:41:99:D6:28:
A5:29:72:85:20:52:2E:0C:1D:3E:37:78:10:B5:CC:AE:D5:A9:
A6:79:FE:07:F4:93:E2:E9:F4:48:17:E5:A6:EB:36:D9:3E:41:
2E:8D:E9:7A:D4:75:49:A5:98:8F:76:73:8A:A7:E6:1D:89:CA:
46:B2:FC:A6:E7:96:F3:79:EB:5A:B1:B0:63:E4:AC:7C:D9:29:
AE:2D:04:4E:45:B0:08:38:7F:C6:62:72:04:C6:A2:7C:BC:77:
AF:CE:92:2F:66:75:33:8B:81:AB:98:40:61:74:9C:6B:10:15:
78:A7:58:02:DA:D1:69:C2:C2:8B:DA:66:18:BD:13:FB:4F:7D:
35:35:C3:21:6F:0A:A0:53:ED:56:F8:B9:E9:0E:6F:6D:DD:E1:
A0:AD:4A:07:97:AE:79:3C:2F:7C:E6:76:DD:9F:37:50:EB:AD:
56:3D:BA:51:D0:C1:15:25:54:F6:E2:1D:12:39:46:5F:E3:33:
1E:49:26:04:E0:23:FB:C5:FA:A8:0D:B7:16:23:C5:C9:3E:0C:
85:E2:CE:72:B5:97:0D:3D:15:D6:5D:F7:12:78:9C:84:D2:21:
C8:EC:BE:45:90:A5:CB:38:87:AB:8C:04:4B:BA:42:2B:40:95:
94:BE:F9:82:80:44:76:79:ED:42:5A:ED:28:07:E4:16:6D:C8:
80:D4:33:87:97:39:20:E9:CC:EB:F3:74:CE:F2:3C:6E:4E:C8:
37:51:21:F8:CA:AD:C6:09:3B:19:07:B2:34:3C:17:31:B8:22:
CC:BA:73:5E:9F:CD:F4:8B:38:71:BB:2F:7A:A5:F5:43:A8:8E:
07:47:36:BA:8D:BA:DB:BB:8F:9C:EB:49:A4:6C:2E:30:30:C1:
AF:06:F1:0D:E6:C7:DA:7B:FD:94:68:FD:F0:B3:3F:30:45:8C:
ED:77:FE:09:64:0E:4D:02:03:82:3A:30:61:24:08:4A:AF:BD:
C2:32:6B:70:78:E6:C1:F2:6E:2A:3E:30:1A:7A:A2:BE:70:7F:
86:8A:9B:12:D0:92:7D:14:99:72:FA:30:29:BE:44:8F:3C:D8:
75:16:AE:BD:23:97:E0:04:B5:8A:B9:71:F0:F7:15:0A:A8:95:
CC:51:23:21:6E:3F:9B:64:B1:73:A7:2F:03:22:46:6F:DD:A2:
90:A1:E4:7F:94:92:7F:E7:C2:C5:B9:F9:9D:D3:19:CF:34:3D:
D0:C0:E0:30:F8:77:1A:E8
Public key info:
Algorithm: RSA
Key size: 2048
Exponent: 65537
Modulus: 00:9D:41:BB:13:A8:99:9C:3E:E7:2C:0E:A5:B6:A8:CA:22:64:
BB:B9:77:E5:CE:DE:5E:71:83:9A:90:22:D1:32:E1:66:45:FC:
6C:53:DA:65:D5:FF:C7:35:2C:24:F6:BA:AD:72:DD:27:A5:09:
30:CC:AA:E3:F8:33:B5:10:1C:23:D9:EA:DA:30:6F:E4:2C:C4:
EC:08:E9:12:72:05:0C:C1:CF:6B:72:8F:B5:E8:5B:90:67:B1:
4C:59:D3:4D:CA:0C:73:94:47:F7:DB:BC:83:38:24:E2:AC:19:
DF:7D:8F:99:E0:B2:72:E3:A3:5B:7E:B8:EC:7B:6C:17:8C:48:
5A:F2:F5:A5:14:D3:07:E3:7E:5A:CD:70:6A:9E:38:2D:80:4F:
29:B3:60:F8:AC:7B:C5:09:09:B9:4B:92:D4:E0:44:5D:9E:1A:
AF:0E:25:FA:E5:73:C3:51:8F:DE:BB:F5:71:0C:2F:F3:AC:F5:
7D:79:8A:E6:87:0A:05:6A:D8:C8:6D:FE:BE:90:7D:B5:A2:3D:
3B:75:96:CF:25:98:5C:0B:F2:E3:C1:E7:B5:30:58:27:13:64:
DD:DB:77:A8:10:9C:A5:25:AC:85:DA:30:21:87:71:A8:D7:D8:
BC:60:40:C7:53:54:01:03:0E:60:5D:2B:43:99:97:F2:26:6E:
8F:F7:47:CF:9F
X509v3 Basic Constraints:
CA: No
Critical: Yes
X509v3 Subject key identifier:
ID: 40:6D:58:0E:0A:4C:CD:89:71:CA:DB:D2:BC:AD:FA:27:C9:1E:
4D:D8
Critical: No
X509v3 Authority key identifier:
ID: 7C:E6:3C:E3:FB:76:C5:18:B3:21:52:9D:8F:71:29:28:55:CA:
96:63
Critical: No
X509v3 Key Usage:
Usage: Digital Signature
Non Repudiation
Critical: Yes
X509v3 Subject Alternative Name:
Names: DNS:r1.company.loc
Critical: No
ESR.R1#
Как можно заметить - выписанный сертификат действует 30 дней и в нем было сохранено заданное альтернативное имя. Теперь данный сертификат можно использовать в сервисах маршрутизатора.
Для корректной работы сервисов, использующих сертификаты, рекомендуется настроить на маршрутизаторе синхронизацию времени по протоколу NTP.


