Что такое oid?
OID (Object Identifier) – это дополнительный и необязательный атрибут сертификата электронной подписи, который либо предоставляет дополнительную информацию о владельце, ключах, удостоверяющем центре, либо несёт какую-то дополнительную информацию для приложений и сервисов, которые используют этот сертификат электронной подписи.
Согласно федеральному закону №63-ФЗ от 06.04.2021 «Об электронной подписи», квалифицированный сертификат электронной подписи можно использовать в любой информационной системе без дополнительных соглашений между пользователями. Указанный закон лишь запрещает «операторам информационных систем накладывать на квалифицированные сертификаты требования, ограничивающие их использование в других информационных системах».
Пользуясь расплывчатой формулировкой, некоторые коммерческие площадки требуют в составе сертификата электронной подписи объектный идентификатор. Он открывает доступ к торгам на этой конкретной площадке, не ограничивая доступа к другим. Поэтому OIDы позиционируются как «расширение сферы действия сертификата», но доплачивать за это расширение приходится поставщикам.
Электронных торговых площадок для закупок коммерческих организаций и компаний с госучастием (торги по 223-ФЗ) более 100. По 223-ФЗ проводят закупки компании с долей участия государства выше 50%, их «дочки» и «внучки», естественные монополии (нефтегазовые компании, РЖД и т д.) и ряд других юридических лиц. Требования к электронной подписи эти площадки определяют сами.
Заказчикам, которые получают электронные подписи в Федеральном казначействе и которые работают на 8 основных ЭТП, отобранных для осуществления закупок по 44-ФЗ, не стоит беспокоиться, т.к. их электронные подписи содержат необходимый OID.
Примеры OID электронных торговых площадок:
OID 1.2.643.6.17.1 – ЭТП ГПБ
OID 1.2.643.6.7 – B2B-Center
OID «Фабрикант.ру» – 1.2.643.6.15
OID 1.2.643.3.241 – ТЭК ТОРГ
Внимание: на момент прочтения вами статьи приведённые примеры OID могут измениться, уточняйте у операторов электронных торговых площадок.
СОВЕТ: перед тем, как обратиться в удостоверяющий центр за изготовлением электронной подписи, вы должны понимать на каких электронных торговых площадках будет использоваться данная электронная подпись. Желательно выяснить какой OID должна содержать электронная подпись для работы на конкретной площадке (в этом вам может помочь запрос в службу техподдержки) и уже при обращении в удостоверяющий центр назвать необходимые OID или электронные торговые площадки, на которых планируете работать.
Объектные идентификаторы области использования ключа :: удостоверяющий центр электронная москва
В каждый сертификат издаваемый нашим Удостоверяющим центром включаются следующие OID:
Остальные объектные идентификаторы включаются в издаваемый сертификат на основании Заявления на изготовление сертификата ключа подписи.
Шаг 1. предварительные изыскания и проверка гипотезы
Нет, серьезно, это правда, что в сертификате X.509 есть СНИЛС? Для проверки найдем образец — просим помощи у Яндекса по запросу «реестр выданных квалифицированных сертификатов», на первой же странице выдачи находим
, скачиваем первый попавшийся сертификат (под номером 10842) —
Открываем сертификат с помощью стандартного средства просмотра OC Windows и находим в описании субъекта подозрительно похожую строку с объектным идентификатором 1.2.643.100.3, состоящую из 11 цифр.
Лирическое отступление
О том, что такое объектный идентификатор (OID) вообще, лучше всего почитать здесь. Как используются объектные идентификаторы в описании структуры сертификатов X.509 — смотрим Руководство по выживанию — TLS/SSL и сертификаты SSL (X.509).
Открываем сертификат в виртуальной машине с установленным криптопровайдером КриптоПРО CSP, который наверняка знает отечественную специфику, и подтверждаем догадку.
Итак, поставленная задача потенциально выполнима, СНИЛС в квалифицированном сертификате есть. Идем дальше.
Шаг 3. разработка парсера x.509 сертификата на с#
Так сложилось, что разработка у нас ведется на C#, поэтому и пример парсера будет на C#, ничего личного и никакого холивара.
Для простоты формализуем задачу следующим образом. Дано: файл квалифицированного сертификата в системе ограничений CER (Canonical encoding rules). Требуется: разобрать (распарсить) сертификат и извлечь значения ИНН, СНИЛС и ОГРН из поля субъекта (Subject).
Для первых набросков обращаемся к возможностям пространства имен System.Security.Cryptography.X509Certificates:
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Diagnostics;
namespace X509Parser
{
class Program
{
static void Main(string[] args)
{
string fileName = @"c:Komarov_Aleksey_Petrovich_2021-03-31_a2ba20c4.cer";
X509Certificate cert = new X509Certificate(File.ReadAllBytes(fileName));
Debug.Print("Серийный номер: {0}", cert.GetSerialNumberString());
Debug.Print("Дата окончания действия квалифицированного сертификата: {0}", cert.GetExpirationDateString());
Debug.Print("Субъект: {0}", cert.Subject);
}
}
}
На выходе получаем:
Подведение итогов
Итак, подытоживая проделанную работу, мы:
- Разобрались со структурой квалифицированных сертификатов X.509, которые попадают в сферу действия ФЗ «Об электронной подписи».
- Узнали, что Приказ ФСБ РФ № 795 определяет дополнительные атрибуты — ИНН, СНИЛС, ОГРН и другие. Здесь же указываются соответствующие объектные идентификаторы (OID).
- Разработали парсер сертификатов X.509 на C# с возможностью извлечения полей и их атрибутов с заданными объектными идентификаторами. Библиотека BouncyCastle добавила решению простоты.
В расчетах по времени произошла ошибка — вместо запланированных нескольких часов пришлось разбираться весь день. И еще два дня на подготовку исследования для Хабра.
Спасибо за внимание!