Перейти к содержанию

Инфраструктура открытых ключей#

В систему Numa Edge входит модуль управления PKI (инфраструктурой открытых ключей), предоставляющий сервисы для использования технологии открытых ключей. Универсальное применение сертификатов обеспечивает стандарт Международного Союза по телекоммуникациям X.509, который является базовым и поддерживается целым рядом протоколов безопасности. В их числе — стандарты шифрования и ЭЦП с открытыми ключами, протокол связи SSL и безопасный протокол передачи гипертекстовых сообщений HTTPS (Secure HTTP). Модуль PKI предназначен для выпуска и управления сертификатами, создания пары ключей (открытый и закрытый) для шифрования данных, управления базой данных инфраструктуры открытых ключей.

Сервисы, предоставляемые модулем PKI могут быть использованы при настройке аутентификации узлов VPN на базе сертификатов X.509, а также при настройке аутентификации пользователей системы Numa Edge.

Сервисы управления PKI реализованы на базе библиотеки OpenSSL.

Сервисы управления предоставляют возможности по созданию сертификата пользователя и его подписание на базе российских криптографических алгоритмов (функции хеширования ГОСТ Р34.11-2012, цифровой подписи — ГОСТ Р34.10-2012 и ГОСТ Р34.10-2001 для обратной совместимости), а также на базе криптосистемы RSA. Цифровые сертификаты соответствуют международным рекомендациям X.509 v3 и могут выдаваться в форматах PKCS12 или PEM.

В процессе управления ключами УЦ имеет возможность отзыва выпущенных им сертификатов, что необходимо для досрочного прекращения их действия, например, в случае компрометации ключа.

Примечание

В связи с ограниченным функционалом УЦ, встроенного в Numa Edge, рекомендуется использовать сторонние УЦ.

Основные компоненты PKI#

Неотъемлемым компонентом инфраструктуры открытых ключей является удостоверяющий центр. Непосредственное использование открытых ключей требует дополнительной их защиты и идентификации для определения связи с секретным ключом. Электронный сертификат представляет собой цифровой документ, который связывает открытый ключ с его владельцем. Для заверения электронного сертификата используется электронная цифровая подпись удостоверяющего центра (УЦ). УЦ включает свое имя в каждый выпущенный им сертификат и подписывает их при помощи собственного секретного ключа. Конечные субъекты идентифицируют сертификаты по имени УЦ, и могут убедиться в их подлинности, используя его открытый ключ. Удостоверяющий центр выполняет следующие основные функции:

  • формирует собственный секретный ключ и самоподписанный сертификат;
  • выпускает сертификаты сервера и клиентов;
  • ведет базу данных всех изданных сертификатов и формирует список аннулированных сертификатов.

Инфраструктура открытых ключей позволяет генерировать пары ключей (открытый ключ/секретный ключ). Генерация ключей может осуществляться централизованно (удостоверяющим центром) или индивидуально (конечным субъектом). В том случае если генерация ключей осуществляется конечными пользователями, они должны иметь соответствующие программные или аппаратные средства для создания надежных ключей. В том случае если пользователь не предъявляет достаточных мер для защиты своих секретных ключей, инфраструктура PKI подвергается серьезному риску.

К преимуществам централизованной генерации можно отнести быстроту создания ключей, использование специализированных средств генерации высококачественных ключей, контроль соответствия алгоритмов генерации установленным стандартам, а также хранение резервных копий на случай их утери пользователями. В том случае если ключи генерируются централизованно, они должны транспортироваться пользователям только через безопасные каналы связи. В том случае если секретный ключ пользователя потерян, похищен или скомпрометирован, или если есть вероятность наступления таких событий, действие сертификата должно быть прекращено.

Формат сертификата определен в рекомендациях Международного союза по телекоммуникациям ITU (X.509), в настоящее время основным используемым форматом является формат версии 3. Сертификат представляет собой структурированную двоичную запись, содержащую элементы данных, сопровождаемые цифровой подписью издателя сертификата. В сертификате имеется десять основных полей: шесть обязательных и четыре опциональных. К обязательным полям относятся:

  • идентификатор алгоритма подписи Signature Algorithm Identifier;
  • имя издателя Issuer Name;
  • период действия Validity (Not before / After);
  • открытый ключ субъекта Subject Public Key Information;
  • имя субъекта сертификата Subject Name.

В данном случае под субъектом понимается сторона, контролирующая секретный ключ, соответствующий данному открытому ключу. Поле Version задает синтаксис сертификата. Удостоверяющий центр, выпускающий сертификат, присваивает каждому сертификату серийный номер Certificate Serial Number, который должен быть уникален.

В поле Signature Algorithm Identifier указывается идентификатор алгоритма ЭЦП, который был использован для защиты сертификата. В поле Validity (Not Before/After) указываются даты начала и окончания периода действия сертификата.

Каждый раз при использовании сертификата проверяется, является ли сертификат действующим. Сертификаты, срок действия которых истек, должны аннулироваться удостоверяющим центром.

Особенности реализации PKI#

Ограничения, предъявляемые к содержимому сертификатов.#

Ввиду особенностей реализации подсистемы PKI, а так же возможности неоднозначной трактовки RFC 5280, не гарантируется поддержка следующих сертификатов:

  1. Сертификаты с пустым полем subject.
  2. Различные сертификаты с одинаковым полем subject.
  3. Сертификаты с отсутствующим полем Common Name.

Организация хранения сертификатов#

В Numa Edge все сертификаты УЦ и конечные сертификаты хранятся в одной директории. В связи с этим накладываются определенные ограничения на именование сертификатов.

С точки зрения системы конфигурирования, имена сертификатов в файловой системе представляют собой имена узлов ca <имя> и certificate <имя_сертификата>.

В конфигурационном режиме накладываемые ограничения выражаются в невозможности указать одинаковые имена для узлов УЦ или конечных сертификатов. В таком случае для сертификата УЦ выполняемые действия будут рассматриваться как попытка изменить существующий сертификат, что запрещено, а для конечного сертификата (например, в рамках соседнего УЦ) будет выдано соответствующее предупреждение на стадии commit вида:

E: Сертификат с именем 'TestCert' уже существует
Commit failed

При импорте сертификатов также следует учитывать существующие ограничения. При попытке импорта сертификата УЦ, с именем, идентичным уже имеющемуся в системе, будет выдано предупреждение вида:

Импортируется сертификат УЦ CA Certificate как CACert
E: Существует другой УЦ с таким же именем CACert

Примечание

С конечными сертификатами подобное ограничение для операции импорта отсутствует. Таким образом, можно заменить конечный сертификат в рамках уже имеющегося другого или того же УЦ, в случае совпадения их имён. Следует обращать внимание на эту особенность перед выполнением импорта сертификатов.

Совместимость реализации PKI#

При экспорте ключей из Numa Edge в сторонние устройства могут возникнуть проблемы совместимости. Например, если есть сервер OpenLDAP, собранный с поддержкой библиотеки GnuTLS (а не OpenSSL), то при экспортировании созданного на Numa Edge сертификата и использовании его в качестве сертификата сервера, сервер OpenLDAP не будет запущен и будет получено следующее сообщение об ошибке:

TLS init def ctx failed: -207

Данная ситуация обусловлена тем, что секретный ключ при генерации сертификата на Numa Edge создается в формате PKCS#8, который не поддерживается сервером OpenLDAP, собранным с поддержкой GnuTLS. Для конвертации секретного ключа в традиционный формат необходимо воспользоваться следующей командой:

openssl rsa -in old_key.pem -out new_key.pem

Пример настройки PKI#

В этом наборе примеров приведено создание инфраструктуры открытых ключей в системе Numa Edge, генерация сертификатов, экспорт/импорт сертификатов. В данном наборе примеров используются две системы Numa Edge, имеющие имена edge1 и edge2 соответственно.

Создание удостоверяющего центра#

В данном примере будет приведено создание удостоверяющего центра, который будет использован для управления сертификатами стандарта X.509. В данном примере удостоверяющий центр создается на узле edge1. На базе созданного удостоверяющего центра будет осуществляться централизованное создание и управление ключевыми парами и сертификатами узлов edge1 и edge2. Для создания нового удостоверяющего центра необходимо выполнить следующие шаги на узле edge1 в режиме настройки:

Пример – Создание удостоверяющего центра на узле edge1#
  1. Создание удостоверяющего центра

    [edit] 
    admin@edge1# set pki ca MainCA
    

  2. Указание общего имени (common name) удостоверяющего центра

    [edit]
    admin@edge1# set pki ca MainCA cn "Main Certification Authority"
    

  3. Указание города, в качестве одного из атрибутов идентификатора УЦ

    [edit]
    admin@edge1# set pki ca MainCA city SPb
    

  4. Указание страны, в качестве одного из атрибутов идентификатора УЦ
    [edit]
    admin@edge1# set pki ca MainCA country RU
    
  5. Указание периода действия сертификата удостоверяющего центра
    [edit]
    admin@edge1# set pki ca MainCA expiration 365
    
  6. Фиксация настройки
    [edit]
    admin@edge1# commit
    
  7. Вывод настройки
    1
    2
    3
    4
    5
    6
    7
    8
    [edit]
    admin@edge1# show pki ca MainCA 
       city SPb 
       cn "Main Certification Authority" 
       country RU 
       expires-on "Thu Nov 7 12:35:42 2020" 
       key-size 256 
       key-type gost2012
    

Генерация сертификата узла edge1#

В данном примере будет приведено создание сертификата узла edge1.

Для создания сертификата узла edge1 необходимо выполнить следующие шаги на узле edge1 в режиме настройки:

Пример – Создание сертификата узла edge1#
  1. Создание сертификата для узла edge1
    [edit] 
    admin@edge1# set pki ca MainCA certificate edge1-cert
    
  2. Указание общего имени (common name), которое будет указано в сертификате узла edge1
    [edit] 
    admin@edge1# set pki ca MainCA certificate edge1-cert cn "edge1 VPN certificate"
    
  3. Указание срока действия сертифката. Срок действия выпускаемого сертификата не должен превышать срок сдейтсвия сертификата УЦ
    [edit] 
    admin@edge1# set pki ca MainCA certificate edge1-cert expiration 180
    
  4. Фиксация настройки
    [edit]
    admin@edge1# commit
    
  5. Вывод настройки созданного сертификата
    1
    2
    3
    4
    5
    6
    [edit] 
    admin@edge1# show pki ca MainCA certificate edge1-cert 
       cn "edge1 VPN certificate" 
       expires-on "Mon May 6 12:37:11 2020" 
       key-size 256 
       key-type gost2012
    

Генерация сертификата узла edge2#

В данном примере будет приведено создание сертификата узла edge2.

Для создания сертификата узла edge2 необходимо выполнить следующие шаги на узле edge1 в режиме настройки:

Пример – Создание сертификата узла edge2#
  1. Создание сертификата для узла edge2
    [edit]
    admin@edge1# set pki ca MainCA certificate edge2-cert
    
  2. Указание общего имени (common name), которое будет указано в сертификате узла edge2
    [edit] 
    admin@edge1# set pki ca MainCA certificate edge2-cert cn "edge2 VPN certificate"
    
  3. Указание срока действия сертифката. Срок действия выпускаемого сертификата не должен превышать срок сдейтсвия сертификата УЦ
    [edit] 
    admin@edge1# set pki ca MainCA certificate edge2-cert expiration 180
    
  4. Фиксация настройки
    [edit] 
    admin@edge1# commit
    
  5. Вывод настройки созданного сертификата
    1
    2
    3
    4
    5
    6
    [edit] 
    admin@edge1# show pki ca MainCA certificate edge2-cert 
       cn "edge2 VPN certificate" 
       expires-on "Mon May 6 12:37:57 2020" 
       key-size 256 
       key-type gost2012
    

Экспорт сертификата узла edge2#

В данном примере приведен экспорт сертификата узла edge2 на флэш-накопитель. При выполнении команды pki export certificate <имя_сертификата> к устройству должен быть подключен флэш-накопитель. Монтирование и размонтирование флэш-накопителя осуществляется автоматически. Экспортируемые файлы будут помещены в корневую директорию флэш-накопителя. К экспортируемым файлам относятся: сертификат удостоверяющего центра, сертификат клиента, подписанный указанным удостоверяющим центром, секретный ключ клиента и файл, содержащий список аннулированных сертификатов.

Примечание

При использовании команды pki export certificate <имя_сертификата> экспортируется секретный ключ, связанный с открытым ключом, указанным в сертификате. Секретный ключ должен храниться в тайне, и не должен передаваться третьим лицам.

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

Пример – Экспортирование сертификата узла edge2#
Действие Команда
Экспортирование сертификата узла edge2, секретного ключа узла edge2, сертификата удостоверяющего центра admin@edge1:~$ pki export certificate

После осуществления экспорта в корневой директории флэш-накопителя будут содержаться следующие файлы:

  • MainCA.crt: сертификат удостоверяющего центра;
  • edge1-cert.crt: сертификат узла edge2;
  • MainCA.crl: список отозванных сертификатов;
  • edge2-cert.key: секретный ключ узла edge2.

Импорт сертификата узла edge2#

В данном примере приведен импорт сертификата узла edge2 с флэш-накопителя. При выполнении команды pki import к устройству должен быть подключен флэш-накопитель, в корне которого должны размещаться следующие файлы:

  • сертификат удостоверяющего центра;
  • сертификат узла edge2;
  • список отозванных сертификатов;
  • секретный ключ узла edge2.

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

Для импорта сертификата узла edge2 необходимо выполнить следующие шаги на узле edge2 в эксплуатационном режиме, к устройству должен быть заранее подключен флэш-накопитель:

Пример – Импорт сертификата узла edge2#
  1. Импорт сертификата узла edge2, секретного ключа узла edge2, сертификата удостоверяющего центра, списка отозванных сертификатов
    1
    2
    3
    4
    5
    admin@edge2:~$ pki import
    Импортируется сертификат УЦ Main Certification Authority как MainCA
    Импортируется сертификат edge2 VPN certificate как edge2-cert
    Импортируется CRL для MainCA
    Импортируется ключ для edge2-cert
    
  2. Вывод секции pki в режиме конфигурирования
    [edit]
    admin@edge2# show pki ca MainCA
       certificate edge2-cert {
           cn "edge2 VPN certificate"
           expires-on "Mon May 6 12:37:57 2020"
           key-size 256
           key-type gost2012
       }
       city SPb
       cn "Main Certification Authority"
       country RU
       expires-on "Thu Nov 7 12:35:42 2020"
       key-size 256
       key-type gost2012