
Планируется ли доработка утилиты CAFL63 для создания удостоверяющих центров в свете последних изменений, про которые вы говорите в статье
И такая доработка утилиты CAFL63 была проведена. Доработанную утилиту для разных платформ можно скачать здесь:
Напомним, что утилита CAFL63 позволяет избавиться от большого многообразия файлов, с которыми работает программа openssl, и перейти к работе с базами данных, а также даёт графический интерфейс для выпуска сертификатов и управления ими.
Поскольку утилита CAFL63 написана на tcl/tk, то основные изменения, с точки зрения просмотра сертификатов выпущенных по новым требованиям, аналогичны изменениям, сделанным в утилите cryptoarmpkcs. Это касается и включения новых oid-ов в пакет pki и функции разбора расширения identificationKind.
Более серьёзная проблема связана с выпуском самих сертификатов, поскольку здесь задействуется утилита openssl или утилита, сделанная на её основе.
Расширение identificationKind без проблем можно добавить для новых сертификатов через секцию расширений cert_ext (параметр –extentions cert_ext) конфигурационного файла config.cfg (параметр –config config.cfg):
openssl x509 -req -inform PEM -outform PEM -CA rootca.pem -CAkey rootca.key -passin pass:01234567 -extfile config.cfg -extensions cert_ext -days 366 -set_serial 4100 –in req.csr
Эта команда предписывает утилите openssl создать сертификат из запроса (x509 -req), находящего в файле req.csr (-in req.csr), добавив в сертификат расширения из секции cert_ext (-extensions cert_ext) конфигурационного файла config.cfg (-extfile config.cfg)
Если мы хотим указать, что идентификация владельца сертификата проводилась в его личном присутствии, то в секции cert_ext будет записан код:
[cert_ext]
1.2.643.100.114 = DER:02:01:00
Такая запись в конфигурационном файле приведет к появлению в сертификате информации о том, что владелец сертификата лично приходил в удостоверяющий центр для получения сертификата.
Если для идентификации использовалась электронная подпись на действующем сертификате, то код будет следующим:
OID.1.2.643.100.114 = DER:02:01:01
И т.д.
Хотелось, чтобы и атрибут INNLE (oid — 1.2.643.100.4) для юридических лиц можно было бы также легко добавлять в запрос и сертификат. И на первый взгляд это так, вместо имени INNLE будем задействовать его oid в секции req_distinguished_name при создании запроса:
[ req ]
distinguished_name = req_distinguished_name
. . .
[ req_distinguished_name ]
C = RU
ST = Московская область
O = Тест юридического лица
CN = urlitzo
#INNLE = 8765432109
#Атрибут INNLE имеет oid 1.2.643.100.4
#OID.1.2.643.100.4 = <10 цифр INNLE>
OID.1.2.643.100.4 = 8765432109
emailAddress = ul@ul.ca
После внесения этих изменений в конфигурационный файл config.cfg и выполнения команды:
openssl req -new -utf8 -config config.cfg -key urlitzo.key -passin pass:01234567 -outform PEM
мы получаем запрос с атрибутом INNLE (для просмотра мы использовали утилиту cryptoarmpkcs):

И на первый взгляд всё хорошо, но если посмотреть asn1-структуру запроса, то окажется что атрибут INNLE имеет тип кодирования UTF8:

Это противоречит новым требованиям, в которых для INNLE определён другой тип кодирования:
INNLE (ИНН юридического лица).
Значением атрибута INNLE является строка, состоящая из 10 цифр и представляющая ИНН владельца квалифицированного сертификата — юридического лица. Объектный идентификатор типа атрибута INNLE имеет вид 1.2.643.100.4, тип атрибута INNLE описывается следующим образом:
INNLE::= NUMERIC STRING SIZE 10;
В итоге становится ясным, что требуется внесение изменений в основной код проекта openssl для поддержки в нём новых oid-ов и в первую очередь INNLE и OGRNIP. Тем более, что oid-ы INN и OGRN в проект openssl уже внесены.
Исходя из этих реалий, было решено добавить в проект CAFL63 встроенный модуль openssl, который доработан с учетом Приказа №795 ФСБ России в редакции от 29.01.2021 года. Это позволяет использовать утилиту CAFL63 для развёртывания учебного или корпоративного удостоверяющего центра независимо от наличия у пользователя openssl с поддержкой последних требований.
Начав работу с утилитой CAFL63 с нажатия кнопки «Создать БД», пользователь, пройдя несколько шагов, попадёт на вкладку выбора модуля OpenSSL:

Здесь можно либо выбрать собственный модуль openssl, либо ввести текст «internalModule» для использования встроенного модуля. Оставляем internalModule и нажимаем кнопку «След>»:

После создания базы данных УЦ начинаем работу на УЦ с нажатия кнопки «Открыть БД». После открытия базы данных следует настроить шаблоны для сертификатов которые будут выпускаться на УЦ (Средства → Настройки → Типы сертификатов → Юридическое лицо → Редактировать):

И начнём мы, как вы уже догадались, с профиля сертификатов для юридических лиц:

Этот механизм позволяет редактировать существующие профили и создавать новые. Для каждого профиля (вкладка «KeyPair») указывается тип ключ, который будет создаваться при генерации запроса. Для генерации ключей помимо утилиты openssl могут используются и криптографические токены PKCS#11 с поддержкой российской криптографии. В этом случае указывается библиотека для доступа к токенам:

Получить сертификат на УЦ CAFL63 пользователь может одним из двух способов.
Первый: прийти на УЦ с готовым запросом в формате PKCS#10, в котором содержатся все необходимые о нём сведения, подписанные его закрытым ключом. Это самый безопасный способ. Сотрудники УЦ в этом случае никак не пересекаются с закрытым ключом заявителя. В будущем им нельзя будет предъявить никаких претензий, что они могли что-то подписать за владельца сертификата. В этом случае запрос пользователя импортируется в систему и помечается как созданный пользователем за пределами УЦ:

Во втором случае запрос создается на УЦ. При его создании, помимо выбора профиля сертификата, будет предложено определиться с механизмом генерации закрытого ключа. Для генерации ключа может быть использован как токен PKCS#11, так и утилита openssl:

Первый из этих вариантов более предпочтителен, тем более, если токен не позволяет экспортировать закрытые ключи.
При генерации закрытого ключа утилитой openssl он вместе с сертификатом упаковывается в защищенный контейнер PKCS#12 и передаётся заявителю. В последнем случае заявитель должен как-то удостовериться, что на УЦ не осталось дубликата ключа.
Перед выпуском сертификата запрос должен пройти процедуру утверждения. Для этого необходимо выделить запрос и нажать правую кнопку мыши. В появившемся меню выбрать пункт «Принятие решения»:

После утверждения запроса можно выпускать сертификат. В процессе выпуска сертификата будет предложено еще раз просмотреть запрос, а также указать способ идентификации заявителя:

Это последнее требование из новой редакции Приказа №795, реализация которого была добавлена в утилиту CAFL63.
После нужно перейти на вкладку «Сертификаты», где проводится основная работа с сертификатами, и выгрузить сертификат заявители. Сертификат передается либо просто как файл, если заявитель пришёл с готовым запросом. Если заявитель использовал при генерации токен PKCS#11, то вместе с сертификатом ему передаётся и сам токен. При генерации ключевой пары модулем openssl, пользователю передаётся защищенный контейнер PKCS#12, в котором находится и сам ключ, и сертификат пользователя и корневой сертификат УЦ:

Скоро будем отмечать 10-летний Юбилей Приказа ФСБ России от 27.12.2011 №795. И ждём новой редакции.