Получение версии, серийного номера, алгоритма

В Jsrsasign информация о версии доступна как часть глобального пространства библиотеки. В зависимости от способа подключения (UMD, CommonJS или ES-модуль), версия может быть получена напрямую из экспортируемого объекта или глобальной переменной.

При подключении через браузерный билд:

console.log(jsrsasign.version);

или в некоторых сборках:

console.log(KJUR.version);

Значение версии представляет собой строку вида x.y.z и отражает текущую сборку библиотеки. Эта информация используется при диагностике совместимости криптографических операций и проверке корректности подключённого пакета.

В Node.js окружении:

import { version } from "jsrsasign";

console.log(version);

Версия не влияет на криптографические вычисления напрямую, но критична при работе с различиями в реализации ASN.1 парсинга и обработке X.509 сертификатов между релизами.


Получение серийного номера X.509 сертификата

Серийный номер является обязательным полем X.509 сертификата и используется для его уникальной идентификации в рамках удостоверяющего центра.

В Jsrsasign работа с серийным номером осуществляется через объект X509.

Базовый сценарий начинается с загрузки сертификата:

const certPEM = `
-----BEGIN CERTIFICATE-----
MIID...
-----END CERTIFICATE-----
`;

const x509 = new X509();
x509.readCertPEM(certPEM);

После разбора сертификата серийный номер извлекается в шестнадцатеричном виде:

const serialHex = x509.getSerialNumberHex();
console.log(serialHex);

Серийный номер возвращается без префикса 0x и представляет собой строку HEX-значений. Внутренне это значение хранится как ASN.1 INTEGER и преобразуется библиотекой в строковое представление.

Дополнительно можно получить десятичное представление через преобразование:

const serialBigInt = BigInt("0x" + serialHex);
console.log(serialBigInt.toString(10));

Извлечение версии сертификата

Версия X.509 сертификата определяет используемую структуру и допустимые расширения. В практике встречаются версии v1, v2 и v3, при этом наиболее распространена v3.

В Jsrsasign версия извлекается через метод объекта X509:

const version = x509.getVersion();
console.log(version);

Возвращаемое значение обычно представлено числом:

  • 0 — X.509 v1
  • 1 — X.509 v2
  • 2 — X.509 v3

Для приведения к человекочитаемому виду используется простое сопоставление:

const versionMap = ["v1", "v2", "v3"];
console.log(versionMap[version]);

Версия сертификата важна при анализе наличия расширений, таких как Subject Alternative Name или Key Usage, которые поддерживаются только начиная с v3.


Определение алгоритма подписи сертификата

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

Получение алгоритма в виде строки

const sigAlg = x509.getSignatureAlgorithmField();
console.log(sigAlg);

Результат обычно представляет собой строковое обозначение, например:

  • SHA256withRSA
  • SHA384withECDSA
  • SHA1withRSA

Этот формат удобен для логирования и анализа совместимости.


Получение OID алгоритма подписи

Для более низкоуровневого анализа используется OID:

const sigAlgOid = x509.getSignatureAlgorithmOID();
console.log(sigAlgOid);

OID представляет собой числовую точку-нотацию, например:

  • 1.2.840.113549.1.1.11 (SHA256withRSA)

Использование OID необходимо при сопоставлении алгоритмов в ASN.1 структурах и при валидации цепочек доверия.


Определение алгоритма публичного ключа

Алгоритм ключа отличается от алгоритма подписи и описывает криптографическую природу открытого ключа внутри сертификата.

После загрузки сертификата:

const publicKey = x509.getPublicKey();

Тип ключа определяется через свойства объекта:

console.log(publicKey.type);

Возможные значения:

  • RSA
  • ECDSA
  • DSA

Для RSA-ключей дополнительно доступны параметры модуля и экспоненты:

if (publicKey.type === "RSA") {
    console.log(publicKey.n.toString(16)); // modulus
    console.log(publicKey.e.toString(16)); // exponent
}

Для ECDSA ключей можно получить параметры кривой:

if (publicKey.type === "EC") {
    console.log(publicKey.ecparams.curveName);
}

Связь версии, серийного номера и алгоритма в структуре сертификата

Эти три элемента находятся в разных частях ASN.1 структуры X.509:

  • версия определяется в корневом поле TBSCertificate
  • серийный номер находится в tbsCertificate.serialNumber
  • алгоритм подписи присутствует в signatureAlgorithm

Jsrsasign абстрагирует ASN.1 разбор, предоставляя методы доступа без необходимости ручного декодирования структуры.

Пример комплексного извлечения:

const x509 = new X509();
x509.readCertPEM(certPEM);

const info = {
    version: x509.getVersion(),
    serial: x509.getSerialNumberHex(),
    sigAlg: x509.getSignatureAlgorithmField(),
    sigAlgOid: x509.getSignatureAlgorithmOID()
};

console.log(info);

Особенности интерпретации значений

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

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

Версия сертификата влияет на доступность расширений, но не влияет на способ извлечения базовых полей — методы Jsrsasign остаются одинаковыми для всех версий X.509.