Объектный идентификатор (Object Identifier, OID) представляет собой иерархическую последовательность чисел, разделённых точками, например:
1.2.840.113549.1.1.11
Такие идентификаторы используются в криптографии и X.509 для описания алгоритмов, расширений сертификатов, атрибутов субъектов и множества других структурных элементов. В практике работы с PKI они выступают универсальным способом кодирования именованных сущностей в машинно-независимом формате.
В библиотеке Jsrsasign работа с OID централизована через внутренние таблицы соответствий и набор утилит для двунаправленного преобразования между человекочитаемыми именами и числовыми идентификаторами.
В основе лежит словарь соответствий:
Эти отображения используются при:
Основной объект, отвечающий за работу с идентификаторами:
KJUR.asn1.x509.OID
Он содержит предопределённые таблицы и методы для поиска.
Метод преобразования из имени в числовой идентификатор позволяет получать ASN.1 совместимые значения из удобных строковых ключей.
Пример использования:
const oid = KJUR.asn1.x509.OID.name2oid("sha256WithRSAEncryption");
console.log(oid);
// 1.2.840.113549.1.1.11
Внутренняя логика:
Алгоритмы подписи
Хеш-функции
Алгоритмы шифрования
Расширения X.509
Обратная операция используется при разборе сертификатов и ASN.1 структур.
const name = KJUR.asn1.x509.OID.oid2name("1.2.840.113549.1.1.11");
console.log(name);
// sha256WithRSAEncryption
Если OID отсутствует в таблице, возвращается:
При декодировании сертификата часто встречается структура:
AlgorithmIdentifier
algorithm: OID
parameters: ANY
Jsrsasign при парсинге выполняет обратное отображение:
const cert = new X509();
cert.readCertPEM(pemString);
const algOid = cert.getSignatureAlgorithmOID();
const algName = KJUR.asn1.x509.OID.oid2name(algOid);
Результат позволяет перейти от низкоуровневого ASN.1 представления к логическому имени алгоритма.
Внутренний словарь OID организован как объект:
KJUR.asn1.x509.OID.name2oidList = {
"rsaEncryption": "1.2.840.113549.1.1.1",
"sha256WithRSAEncryption": "1.2.840.113549.1.1.11"
}
И обратная структура:
KJUR.asn1.x509.OID.oid2nameList = {
"1.2.840.113549.1.1.1": "rsaEncryption",
"1.2.840.113549.1.1.11": "sha256WithRSAEncryption"
}
Алгоритм поиска:
При работе с OID важна строгая нормализация входных данных:
Пример:
KJUR.asn1.x509.OID.name2oid("SHA256WITHRSAENCRYPTION"); // может не сработать
KJUR.asn1.x509.OID.name2oid("sha256WithRSAEncryption"); // корректно
Jsrsasign позволяет добавлять собственные идентификаторы:
KJUR.asn1.x509.OID.name2oidList["myCustomAlg"] = "1.2.3.4.5.6.7";
KJUR.asn1.x509.OID.oid2nameList["1.2.3.4.5.6.7"] = "myCustomAlg";
Это используется при:
После добавления становится доступно двунаправленное преобразование:
KJUR.asn1.x509.OID.name2oid("myCustomAlg");
KJUR.asn1.x509.OID.oid2name("1.2.3.4.5.6.7");
В публичных ключах X.509 OID определяет тип ключа:
const spki = KJUR.asn1.x509.X509.getPublicKeyFromCertPEM(pem);
Тип ключа извлекается через OID:
Пример интерпретации:
const oid = spki.algOid;
const keyType = KJUR.asn1.x509.OID.oid2name(oid);
Расширения X.509 также идентифицируются через OID:
Разбор:
const extOid = "2.5.29.15";
const extName = KJUR.asn1.x509.OID.oid2name(extOid);
Использование имени упрощает обработку логики:
if (extName === "keyUsage") {
// обработка ограничений ключа
}
При обработке OID важно учитывать различие:
Числовая форма
1.2.840.113549.1.1.11
Символическая форма
sha256WithRSAEncryption
Преобразование в Jsrsasign служит мостом между:
Встречаются случаи, когда OID отсутствует в стандартной таблице.
Поведение:
const name = KJUR.asn1.x509.OID.oid2name("1.2.999.999.1");
Результат:
Такие значения используются без интерпретации, но сохраняются для обратной совместимости.
Поиск реализован через прямой доступ к объекту Jav * aScript:
Это критично при массовом разборе сертификатов, где операции выполняются тысячами раз.
Разбор сертификата
Формирование CSR
Проверка политики сертификата
Интеграция с внешними системами
Jsrsasign поддерживает стандартные OID из:
При обновлении криптографических стандартов таблица OID расширяется без изменения базового API преобразования.